出现问题:

通过EntityManager查询出数据保存到对象中,但是向对象set值后就自动更新到数据库中去了。

 

先说一下hibernate对象的三种状态

1、瞬时态:对象刚new出来,还未通过save方法保存到数据库,或通过游离态对象、持久化态对象delete后。(既没有被保存到数据库中,也不处于session缓存中)

2、持久化态:通过从数据库查询出来,或瞬时态对象save保存后,或游离态对象update后)(已经被保存到数据库中同时也处于session缓存中)

3、游离态:通过持久化态对象关闭session,或通过evict、clear方法强制将持久化态对象清理出session。(已经被保存到数据库中但不处于session缓存中)

示例图如下:

 

解决办法:

想办法把持久化状态的对象变成游离态就可以了。

1、close 方法:关闭 session 可以,但是若后面还要用session这个方法就不好了。

2、clear 方法:将 session 中的所有的对象全部清除出缓存

3、evict 方法:将某一个对象清除出缓存 session(推荐)。

代码如下:

//spring注入entityManager

//检查对象是否是持久化态
if(entityManager.contains(entity)){
    //获取session
	Session session =entityManager.unwrap(org.hibernate.Session.class);
    //转换成游离态
	session.evict(entry);
}

 

更多推荐