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

Posted zailushan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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不存在,则添加),

 

以上是关于1.EntityManaget的persist和merge方法的区别的主要内容,如果未能解决你的问题,请参考以下文章

Redis Persistence 之 redis database

redis persistence 之 append only file

3par peer persistence与XP7双活在RAC环境下的比较

CodeForces #368 div2 D Persistent Bookcase DFS

学说持久化实体在 entityManager->persist 和 unitOfWork->persist 之间更改

RDD中cache和persist的区别