休眠状态中的分离、持久和瞬态对象是什么?
休眠状态中的分离、持久和瞬态对象是什么?请举例说明。
未与 文件关联的持久类的实例在数据库中没有表示形式,并且 Hibernate 不会将任何标识符值视为瞬态:new
Session
Person person = new Person();
person.setName("Foobar");
// person is in a transient state
持久性实例在数据库中具有表示形式、标识符值,并与 相关联。您可以通过将瞬态实例与 以下各项相关联来使其持久化:Session
Session
Long id = (Long) session.save(person);
// person is now in a persistent state
现在,如果我们使用Hibernate,持久实例将成为一个分离的实例:它不再附加到某个实例(但仍然可以修改并重新附加到新的实例)。close
Session
Session
Session
所有这一切都在整章10中得到了清楚的解释。使用Hibernate文档的对象,我只是在上面解释。绝对是必读的。
处于休眠状态的对象具有以下状态:
瞬态 - 使用 new 运算符实例化的对象称为瞬态对象。
如果对象刚刚使用 new 运算符实例化,并且未与休眠会话关联,则该对象是瞬态的。它在数据库中没有持久表示形式,也没有分配标识符值。如果应用程序不再保存引用,则垃圾回收器将销毁瞬态实例。
持久性 - 具有与其关联的数据库标识的对象称为持久性对象。
持久性实例在数据库中具有表示形式和标识符值。它可能只是被保存或加载;但是,根据定义,它属于会议的范围。休眠将检测对处于持久状态的对象所做的任何更改,并在工作单元完成时将状态与数据库同步。
已分离 - 已分离的实例是已持久存在但其会话已关闭的对象。
分离的实例可以在以后的某个时间点重新附加到新会话,使其再次持久化。此功能为需要用户思考时间的长时间运行的工作单元启用编程模型。我们称它们为应用程序事务,即从用户的角度来看的工作单元。
http://webiwip.com/interview-questions-answers/hibernate-interview-questions/32012