精华内容
下载资源
问答
  • hibernate merge方法

    千次阅读 2012-08-28 17:31:45
    hibernate 自动生成 dao 包含的几个方法 http://blog.csdn.net/wmh0599/article/details/6785308   重写SAVE(). DEELTE(Integer id) delete(User persistentInstance)   merge(User detachedInstance) ...

    转载来自

    hibernate 自动生成 dao 包含的几个方法

    http://blog.csdn.net/wmh0599/article/details/6785308

     

    重写SAVE().

    DEELTE(Integer id)

    delete(User persistentInstance)

     

    merge(User detachedInstance)

    public void attachDirty(User instance)

    public void attachClean(User instance)

    ___________________________________Spline_________________________________________

    http://littie1987.iteye.com/blog/1039082

    文章详细介绍了

    Hibernate的merge()方法

    POJO对象处于游离态、持久态、托管态。使用merge()的情况。

    测试过程中游离态、持久态、有用

    1、游离态ID为空,数据库肯定不存在,调用merge(),直接插入数据库。

    2、持久态,pojo对象从数据库中取出的行记录,调用merge(),自动比较该对象和数据库对象是否发生更改,是则更新该行记录。

     

    3、托管态,通过编程的方式指定ID,程序构造的POJO对象,调用merge(),自动比较数据库该ID行记录与POJO对象的属性。不一样则更新。

    但通过程序构造的POJO对象,并指定ID。但POJO的ID为native,并指定了数据库的sequence,调用merge()后,程序指定的ID,还是会被改成新的序列ID,则,该POJO对象还是成了ID不为空、数据库不存在该ID的游离态。

    ___________________________________Spline_________________________________________

     

    http://topic.csdn.net/u/20080703/17/baa09592-55c9-45be-b4dd-1f312be2f064.html文章进行回复暂时还不能理解attachDirty、attachDirty

     

     

     

    展开全文
  • hibernate merge 方法未生效 发现问题: 鉴于 merge 方法的底层操作复制,为了查找原因,将merge 方法分解为 update方法 和 save 方法,继续操作还是未能成功保存,这就肯定是自己的问题了,感觉和实体类有关,后台发现...

    hibernate merge 方法未生效

    发现问题:

    鉴于 merge 方法的底层操作复杂,为了查找原因,将merge 方法分解为 update方法 和 save 方法,继续操作还是未能成功保存,这就肯定是自己的问题了,感觉和实体类有关,后来发现实体类上的注解

    @Table(name = "xxx",schema = "xxx")

    说明,name 表示 对应的表名,schema 表示 数据库名

    后来发现此时数据库名已经不再是之前的数据库了,jdbc 链接中指定的是另一个数据库,所以执行这些操作,最后hibernate 去关联表时,找不到表,就没执行成功

    修改

    将 schema 属性去掉,由于我们在 jdbc 链接中一般都指定了数据库名,最好不要在实体类上在去重复指定数据库的名字,没必要,而且换了数据库了,每个实体类都要修改,只有多数据源的情况下,需要特别指定

    展开全文
  • (1)使用hibernatemerge方法持久化数据时,看控制台发现,merge方法 (可参考补充内容对merge的介绍)  先执行了 select ......... where 1=1 and shenpi0_.menu_code=?  然后执行的 insert into shenpi_info ...

    问题描述:

    在对数据进行更新时,发现控制台报Duplicate entry 'XX' for key 'menu_code' 错误。(我的数据库为MySQL)

    经网上搜索,大多数的解释是 :主键重复错误, 数据库建表时,主键 id 需要设置为 AUTO_INCREMENT 。

    。。。

    检查了一下数据库,我的主键是 id (就是自动增长的),menu_code(是unique的),冲突的正是menu_code,所以不是主键 id 导致,而是 menu_code。


    解决思路:

    (1)使用hibernate的merge方法持久化数据时,看控制台发现,merge方法(可参考补充内容对merge的介绍)

            先执行了  select ......... where 1=1 and shenpi0_.menu_code=?

            然后执行的  insert into shenpi_info (cengji_num, menu_code, menu_name, person_info) values (?, ?, ?, ?)

            说明没有查找到我传入的实体对象,所以直接insert了,当然就会冲突,可是为什么会没找到呢,数据库明明是有的?

    (2)再看select查询,发现查询条件 where 1=1 and shenpi0_.menu_code=?  

        恍然大悟^_^,由于id是自动增长的,所以我传入的实体没有特意设置id,merge自动去找 id=1         && menu_code=“xx”的数据(我传入的实体对应的id不是1),当然就找不到了。

    (3)所以,给传入的实体set对应的Id,此时,merge方法就会找到数据库中的数据,执行update而不是insert,就ok啦。。。


    (4)一句话总结由于没有传入对应的 id,merge( )没有找到符合where条件的数据,就执行了insert(本来应该update的),与unique字段冲突了,所以报错。。

    (希望对遇到同样问题的童鞋有所帮助。。。^_^)

            

      补充:merge()简介: 

    1. 参数实例对象没有提供id或提供的id在数据库中不存在:

          这时merge将执行插入操作,产生的sql语句如下       

              Hibernate: select max(uid) from user     

              Hibernate: insert into hibernate1.user (name, age, uid) values (?, ?, ?)

    2. 参数实例对象的id在数据库中已经存在,此时又有两种情况:

            (1)如果对象有改动,则执行更新操作,产生sql语句有,

             Hibernate: select user0_.uid as uid0_0_, user0_.name as name0_0_, user0_.age as age0_0_ from hibernate1.user user0_ where user0_.uid=? 
             Hibernate: update hibernate1.user set name=?, age=? where uid=?

            (2)如果对象未改动,则执行查询操作,产生的语句有,

             Hibernate: select user0_.uid as uid0_0_, user0_.name as name0_0_, user0_.age as age0_0_ from         hibernate1.user user0_ where user0_.uid=?


    展开全文
  • 用save方法可以得到, a different object with the same identifier value was already associated with the session 该异常先session.clear()一下,再操作。
    用save方法可以得到,
    
    a different object with the same identifier value was already associated with the session
    该异常先session.clear()一下,再操作。
    展开全文
  • [size=large][color=green] merger()方法,很神奇。它可以用来将一个托管(detached)的VO(Value Object)持久化到数据库,以下是它持久化一个托管vo的步骤: 1.在持久化上下文(persist context)中查找与托管VO...
  • Hibernate merge、update与saveOrUpdate方法的区别
  • Hibernate Merge() 方法

    2015-06-09 21:15:20
    1、使用merge方法,如果数据库中有记录,则更新该记录,如果不存在该记录,则进行insert操作。使用saveorUpdate方法,如果数据库中有记录,会无条件执行update方法,如果数据库中无记录,则执行insert操作。 2、...
  • 其实merge方法很简单,看代码。 @Entity public class Father { @Id @GeneratedValue private int id; private String name; } 唯一一个father实体类,执行session.merge(father)方法时,首先会查看father的id...
  • Hibernate merge

    2012-10-18 15:14:09
    今天做了个测试,写了个测试用例来看看merge与update时控制台打印出来的日志有什么不一样。实体bean很简单,就id和name两个字段,接下来分别给出以下几种测试情形的控制台日志内容: 1. 数据库记录已存在,...
  • Hibernatemerge方法

    2014-08-28 11:12:01
     下面来讲讲Hibernatemerge方法。我打算按照hibernate对象生命周期的三个状态来讲。 1:如果POJO对象处于游离态,我所说的游离态是指该对象的id值为空。hibernate判断一个对象在数据库中是否存在不是看对象的...
  • 今天做了个测试,写了个测试用例来看看merge与update时控制台打印出来的日志有什么不一样。实体bean很简单,就id和name两个字段,接下来分别给出...[color=brown]merge方法打印出的日志如下: [/color] Hibernate: ...
  • 这个方法都是hibernate 的保存方法 merge() : 1.如果对象的idertifier(以下简称为id)为空或在数据库不存在,则进行inert动作(此时如果对象的id有值也 将被hibernate自动生成的ID覆盖) 2.如果id存在,则...
  • Hibernate merge()

    2017-11-27 23:19:52
    merge(obj)的执行流程: 1、在session缓存中判断该对象是否存在 若存在则判断其它属性是否有修改过,若无修改则不进行任何操作;若有修改则执行update语句 2、若session缓存中不存在则通过select语句从数据库中...
  • Hibernate中的merge方法

    2017-08-27 10:27:00
    Hibernate中有一个常见的错误:  A different object ...在一个session中存在两个不同的实体却有着相同的身份标签(主键)是会报错的,想要避免这种错误可以使用Hibernate中的merge方法merge方法的作用: ...
  • Hibernatemerge()方法

    2014-12-25 16:33:46
     下面来讲讲Hibernatemerge方法。我打算按照hibernate对象生命周期的三个状态来讲。 1:如果POJO对象处于游离态,我所说的游离态是指该对象的id值为空。hibernate判断一个对象在数据库中是否存在不是看对象的...
  • 测试merge和update的区别,看看merge与update时控制台打印出来的日志有什么不一样。实体bean很简单,就id和name两个字段,接下来分别给出...merge方法打印出的日志如下:  Hibernate: select person0_.id as id0_0_,
  • Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用 2009-06-26 15:56:55 标签:Hibernate 状态 save update saveOrUpdate Hibernate的对象有3种状态,分别为:
  • hibernate merge 讲解

    2012-08-22 15:48:00
    2019独角兽企业重金招聘Python工程师标准>>> http://www.hibernate-training-guide.com/merge.html 转载于:https://my.oschina.net/u/437803/blog/74095
  • 注意: MERGE语句是SQL语句的一种。在SQL Server、Oracle数据库中可用,...1》session1.merge(T entity) 合并实体的方法。 2》merge的作用是:新new一个对象,如果该对象设置了ID,则这个对象就当作游离态处理: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,552
精华内容 5,820
关键字:

hibernatemerge方法