下面我就来详细讲解“Java Hibernate对象(瞬时态,持久态,脱管态)详解”的完整攻略。
瞬时态
所谓瞬时态,是指一个Java对象没有与任何一个Session相关联,因此它没有被Hibernate所管理。简单来说,它是一个普通的Java对象,只是它可能映射到数据库中的某张表,并且在未来有可能被持久化。但是由于它没有与Session相关联,因此Hibernate对其一无所知,只有等到与Session相关联之后才能开始进行相关操作。
示例:
// 新建一个PersonBean对象,此时该对象处于瞬时态
PersonBean person = new PersonBean();
person.setName("Tom");
person.setAge(20);
持久态
持久态指的是一个Java对象已经被Hibernate所管理,也就是已经与一个Session相关联,Hibernate能够跟踪它的状态。具体表现为:
- 该对象在Session中有对应的Persistent实例;
- 对象的状态可能会被同步到数据库中(具体视情况而定);
- 系统中其他的Persistent实例和Session都能够访问该对象。
示例:
// 新建一个Session对象
Session session = sessionFactory.openSession();
// 假设此处我们要查询数据库中id为1的PersonBean对象
PersonBean person = session.get(PersonBean.class, 1);
// 此时,person对象处于持久态
person.setAge(30);
脱管态
脱管态指的是一个Java对象曾经被Hibernate所管理,但是它与Session的关联已经被解除,Hibernate不再跟踪它的状态。此时,这个Java对象以及它的状态和Hibernate已经无关联,但是它仍然保留了以前持久化时的状态,可以被重新关联到Session中进行操作。
示例:
// 新建一个Session对象
Session session = sessionFactory.openSession();
// 假设此处我们要查询数据库中id为1的PersonBean对象
PersonBean person = session.get(PersonBean.class, 1);
// 此时,person对象处于持久态
person.setAge(30);
// Session关闭后,person对象进入脱管态(Detached)
session.close();
// 此时对person对象的任何修改都不会被Hibernate同步到数据库中,因为此时它已经不受Hibernate的管理
person.setAge(40);
至此,Java Hibernate对象(瞬时态,持久态,脱管态)详解就讲解完毕了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Hibernate对象(瞬时态,持久态,脱管态)详解 - Python技术站