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
}
3 个解决方案
#1
一个事务当中,一级缓存是直接生效的,当你查询的时候,你使用的是get方法,这个时候会直接发出一条sql将对象的数据查询出来,此时对象就持久化了,当事务提交时,即使你没有显示的去save或者update,对象也会更新到数据库。如果你在当前事务中不想修改查询对象的属性,可以设置事务为只读事务
#2
现在的初步方案是在dao层获取对象之后直接调用session.evict。
此外,请教另外一个问题:
Person对象,id为主键且为自增列
数据库:mysql
Id生成策略:IDENTITY
请问Hibernate是如何做到save一条记录后后还能获取到这条记录数据库层面对象的ID。
此外,请教另外一个问题:
Person对象,id为主键且为自增列
数据库:mysql
Id生成策略:IDENTITY
Person person=new Person();
hibernateTemplate.save(person);
System.out.println(person.getId());
请问Hibernate是如何做到save一条记录后后还能获取到这条记录数据库层面对象的ID。
#3
现在的初步方案是在dao层获取对象之后直接调用session.evict。
此外,请教另外一个问题:
Person对象,id为主键且为自增列
数据库:mysql
Id生成策略:IDENTITY
Person person=new Person();
hibernateTemplate.save(person);
System.out.println(person.getId());
请问Hibernate是如何做到save一条记录后后还能获取到这条记录数据库层面对象的ID。
#1
一个事务当中,一级缓存是直接生效的,当你查询的时候,你使用的是get方法,这个时候会直接发出一条sql将对象的数据查询出来,此时对象就持久化了,当事务提交时,即使你没有显示的去save或者update,对象也会更新到数据库。如果你在当前事务中不想修改查询对象的属性,可以设置事务为只读事务
#2
现在的初步方案是在dao层获取对象之后直接调用session.evict。
此外,请教另外一个问题:
Person对象,id为主键且为自增列
数据库:mysql
Id生成策略:IDENTITY
请问Hibernate是如何做到save一条记录后后还能获取到这条记录数据库层面对象的ID。
此外,请教另外一个问题:
Person对象,id为主键且为自增列
数据库:mysql
Id生成策略:IDENTITY
Person person=new Person();
hibernateTemplate.save(person);
System.out.println(person.getId());
请问Hibernate是如何做到save一条记录后后还能获取到这条记录数据库层面对象的ID。
#3
现在的初步方案是在dao层获取对象之后直接调用session.evict。
此外,请教另外一个问题:
Person对象,id为主键且为自增列
数据库:mysql
Id生成策略:IDENTITY
Person person=new Person();
hibernateTemplate.save(person);
System.out.println(person.getId());
请问Hibernate是如何做到save一条记录后后还能获取到这条记录数据库层面对象的ID。