Hibernate 关闭自动更新

cucurmber 2016-04-22 12:31:10
在一个事物里,如果你更新了持久化对象的某个字段,即使你没有显式的调用session.update(obj),
Hibernate的事物管理器也会自动帮你去更新这个对象。如何关闭这种自动update

	@Test
public void test(){
Session session = template.getSessionFactory().openSession();
session.getTransaction().begin();
Person person = (Person )session.get(Person.class, 4L);
person.setName("testName");
session.getTransaction().commit();//事物提交后会自动更新Person
}

...全文
585 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cucurmber 2016-05-07
  • 打赏
  • 举报
回复
引用 1 楼 xiaohuashenshou 的回复:
一个事务当中,一级缓存是直接生效的,当你查询的时候,你使用的是get方法,这个时候会直接发出一条sql将对象的数据查询出来,此时对象就持久化了,当事务提交时,即使你没有显示的去save或者update,对象也会更新到数据库。如果你在当前事务中不想修改查询对象的属性,可以设置事务为只读事务
现在的初步方案是在dao层获取对象之后直接调用session.evict。 此外,请教另外一个问题: Person对象,id为主键且为自增列 数据库:mysql Id生成策略:IDENTITY
Person person=new Person();
hibernateTemplate.save(person);
System.out.println(person.getId());
请问Hibernate是如何做到save一条记录后后还能获取到这条记录数据库层面对象的ID。
cucurmber 2016-05-07
  • 打赏
  • 举报
回复
现在的初步方案是在dao层获取对象之后直接调用session.evict。 此外,请教另外一个问题: Person对象,id为主键且为自增列 数据库:mysql Id生成策略:IDENTITY
Person person=new Person();
hibernateTemplate.save(person);
System.out.println(person.getId());
请问Hibernate是如何做到save一条记录后后还能获取到这条记录数据库层面对象的ID。
xiaohuashenshou 2016-04-22
  • 打赏
  • 举报
回复
一个事务当中,一级缓存是直接生效的,当你查询的时候,你使用的是get方法,这个时候会直接发出一条sql将对象的数据查询出来,此时对象就持久化了,当事务提交时,即使你没有显示的去save或者update,对象也会更新到数据库。如果你在当前事务中不想修改查询对象的属性,可以设置事务为只读事务

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧