一个测试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而言的。
Hibernate对象的状态
原文地址:https://www.cnblogs.com/bendoudou/p/8547505.html