• 1.EntityManaget的persist和merge方法的区别


    1.persistmerge的区别:

    Persist:添加

    Merge : 分两种情况,当对象存在id,则修改;当对象不存在id则添加。

    看个例子:

     1  1 public class Account {
     2  2    private AccountRole accountRole;
     3  3    @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
     4  4    public AccountRole getAccountRole() {
     5  5       return accountRole;
     6  6    }
     7  7 
     8  8 //添加account的代码段
     9  9 AccountRole role = accountService.getRoleFromDatabase(AccountRoles.ROLE_USER);
    10 10 account.setAccountRole(role);
    11 11 entityManager.persist(account);//entityManager.merge(account)

    问题说明: role是从数据库中查询出来的,在这种情况下 用persist方法保存account对象,persist同时会将role也保存,这时候因为role这条记录在数据库中已经存在,所以

    这时候调用 persist(account);会报异常。

    解决方法:

    1. 可以取消掉persist方法调用时保存关联对象,即取消掉cascade = CascadeType.PERSIST

    2.可以使用merge方法替代persist

    所以从这可以看出,persist是直接保存,merge是根据id是否存在来判断是保存还是修改(id存在,则修改; id不存在,则添加),

  • 相关阅读:
    airtest-selenium
    window下使用Redis Cluster部署Redis集群
    调用webservice进行身份验证
    ETL数据从sqlserver到mysql之间迁移
    Sqlserver调用api
    EXCEL导入数据到SQLSERVER
    博客园开通的第一天
    Visual Studio 2017 离线安装包
    WPF学习笔记1---初接触
    Visual Studio 2008 + ObjectARX2012环境配置
  • 原文地址:https://www.cnblogs.com/WNof11020520/p/8987385.html
Copyright © 2020-2023  润新知