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不存在,則添加),

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM