休眠状态中的分离、持久和瞬态对象是什么?

2022-08-31 09:33:09

休眠状态中的分离、持久和瞬态对象是什么?请举例说明。


答案 1

未与 文件关联的持久类的实例在数据库中没有表示形式,并且 Hibernate 不会将任何标识符值视为瞬态newSession

Person person = new Person();
person.setName("Foobar");
// person is in a transient state

持久性实例在数据库中具有表示形式、标识符值,并与 相关联。您可以通过将瞬态实例与 以下各项相关联来使其持久化SessionSession

Long id = (Long) session.save(person);
// person is now in a persistent state

现在,如果我们使用Hibernate,持久实例将成为一个分离的实例:它不再附加到某个实例(但仍然可以修改并重新附加到新的实例)。closeSessionSessionSession

所有这一切都在整章10中得到了清楚的解释。使用Hibernate文档的对象,我只是在上面解释。绝对是必读的。


答案 2

处于休眠状态的对象具有以下状态:

瞬态 - 使用 new 运算符实例化的对象称为瞬态对象。

如果对象刚刚使用 new 运算符实例化,并且未与休眠会话关联,则该对象是瞬态的。它在数据库中没有持久表示形式,也没有分配标识符值。如果应用程序不再保存引用,则垃圾回收器将销毁瞬态实例。

持久性 - 具有与其关联的数据库标识的对象称为持久性对象。

持久性实例在数据库中具有表示形式和标识符值。它可能只是被保存或加载;但是,根据定义,它属于会议的范围。休眠将检测对处于持久状态的对象所做的任何更改,并在工作单元完成时将状态与数据库同步。

已分离 - 已分离的实例是已持久存在但其会话已关闭的对象。

分离的实例可以在以后的某个时间点重新附加到新会话,使其再次持久化。此功能为需要用户思考时间的长时间运行的工作单元启用编程模型。我们称它们为应用程序事务,即从用户的角度来看的工作单元。

http://webiwip.com/interview-questions-answers/hibernate-interview-questions/32012


推荐