解决Spring Data JPA set值后自动更新到数据库问题

出现问题:
通过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);*/
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值