hibernate的saveOrUpdate

遇到了一个比较悲剧的问题,事情的经过是这样的奋斗

1.我在service 层new了一个实体类的对象A a =new A(),

2.然后调Dao用hibernate从数据库中取到了一个实体类A的对象b(这个b也是A类的对象)

3.将b类的一些值赋值给了a,即a.setXXX(b.getXXX())……(包括将b的主键赋值给了a)

4.调用Dao用hibernate  saveOrUpdate(a)

5.结果数据库中并不是我想象中的将那条数据更新了,而是新建了一条记录

6.悲剧了……难过

经过同事的帮助,终于解决了问题,具体如下:从步骤3开始

3.将a类的一些值赋值给b,即b.setXXX(a.getXXX());……

4.调用Dao用hibernate  saveOrUpdate(b)

5.和想象中的一样

6.微笑

出现此现象的原因似乎是hibernate内存的问题,把从数据库中取到的实体类对象b放到了内存,但是这个实体类对象虽然和a对象是同一个类的对象,包括主键都一样,但是hibernate并不这么认为是同一个,因此就变成了save而不是update

你可能感兴趣的:(DAO,Hibernate,数据库,service)