一个测试hibernate对象保存的实例:
@Test public void testSavePerson(){ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Person person = new Person(); person.setPname("小丽"); person.setPsex("女"); /** * 参数必须持久化对象 */ session.save(person); transaction.commit(); session.close(); }
1.Person person = new Person(); //在内存中创建一个person对象
2.person.setPname("小丽"); //给person对象赋值
3.person.setPsex("女"); //给person对象赋值
4.session.save(person); //将person移动到hibernatequy区域、
5.transaction.commit(); //发送sql语句,提交事件,发生完第五步后,person存入到数据库中
6.session.close(); //关闭数据库和hibernate的链路
1、2、3步的对象为临时对象,经过session。save()person对象变为持久化状态的对象,4、5是持久化状态(托管状态对象)。6是脱管状态对象
临时状态对象和脱管状态对象的区别:
两个本质一样,但是脱管状态对象曾经与数据库交互过。只有处于持久化状态时hibernate才管。
session.save()、session.update()、session.get()可以把一个临时状态的对象转换成一个持久化状态对象。
session.clear()将session中的对象从session中清空。从持久化状态转为脱管状态。
session.evict(person)把某一个对象从session中清空
一个对象是否是持久化对象是针对某一个session而言的。