zoukankan      html  css  js  c++  java
  • 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不存在,则添加),

  • 相关阅读:
    全景拼接
    krpano之字幕添加
    UML之时序图
    krpano之语音介绍
    小工具之录音(文字转语音)
    动态生成按钮的点击事件绑定
    登录之简单验证码
    登录之md5加密
    redis与mysql数据同步
    Sql Server 主从数据库配置
  • 原文地址:https://www.cnblogs.com/WNof11020520/p/8987385.html
Copyright © 2011-2022 走看看