出现问题:
通过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);

	// 低版本写法
	/*HibernateEntityManager hibernateEntityManager = (HibernateEntityManager) entityManager;
	Session session = hibernateEntityManager.getSession();
	session.evict(wTAdministrativePunish);*/
}
Logo

一站式 AI 云服务平台

更多推荐