解决Spring Data JPA set值后自动更新到数据库问题
出现问题:
通过EntityManager查询出数据保存到对象中,但是向对象set值后就自动更新到数据库中去了。
Hibernate对象的三种状态
1、瞬时态:对象刚new出来,还未通过save方法保存到数据库,或通过游离态对象、持久化态对象delete后。(既没有被保存到数据库中,也不处于session缓存中)
2、持久化态:通过从数据库查询出来,或瞬时态对象save保存后,或游离态对象update后)(已经被保存到数据库中同时也处于session缓存中)
3、游离态:通过持久化态对象关闭session,或通过evict、clear方法强制将持久化态对象清理出session。(已经被保存到数据库中但不处于session缓存中)
解决方法:
想办法把持久化状态的对象变成游离态就可以了。
- close 方法:关闭 session 可以,但是若后面还要用session这个方法就不好了。
- clear 方法:将 session 中的所有的对象全部清除出缓存
- evict 方法:将某一个对象清除出缓存 session(推荐)。
代码如下:
//spring注入entityManager
//检查对象是否是持久化态
if(entityManager.contains(entity)){
//获取session
Session session =entityManager.unwrap(org.hibernate.Session.class);
//转换成游离态
session.evict(entry);
}