休眠与瞬态和分离实体有何不同



引用自文档:

超然

实体具有关联的标识符,但不再关联 使用持久性上下文(通常是因为持久性上下文 已关闭或实例已从上下文中逐出(

这是否意味着休眠保留对所有曾经持久化的对象的引用?但随后会导致记忆舔。

或者这意味着该实体具有与数据库中的实体对应的 id,那么这将导致两个结论:1(只能查询数据库进行检查。2(如果三分之一的实体从数据库中删除该实体,则分离的实体可能会变得暂时性。

首次使用 new(( 运算符在应用程序中创建实体时,它将保持瞬态。当您通过调用 Session.save(( 方法将其与会话关联时,它可以移动到持久状态。当您关闭((会话或从会话中逐出该对象时,它将变为分离状态。您可以通过调用 Session.update(( 或 Session.saveOrUpdate(( 方法再次将分离的对象移动到持久状态。

我在文档中没有找到有关此内容的任何内容,但我相信它确实跟踪了分离的实体......例如,根据 JPA 规范,您有获取实体的情况(但其懒惰关系不是(......如果分离这个实体然后再次合并,它会考虑卸载的关系,但是如果将关系设置为 null,那么合并后它也将被设置为 null ...那么,如果它不记录分离的记录,它将如何区分......级联中也有一些方案。合并行为,可能表明它保留了以前分离的实体的记录....再次这是我所期望的,那里没有文档

saveOrUpdate(( 执行以下操作:

如果对象已在此会话中持久存在,则不执行任何操作

如果与会话关联的另一个对象具有相同的标识符, 引发异常

如果对象没有标识符属性,则保存((

如果对象的标识符具有分配给新 实例化对象,保存(( 它

如果对象由 或 和 进行版本控制,则 版本属性值与分配给新 实例化对象,保存(( 它

否则 update(( 对象

https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/objectstate.html#objectstate-saveorupdate

当使用Spring Data JPA时,该策略几乎被保存了。

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.entity-persistence.saving-entites.strategies

如果一个实体有一个标识符(假设一个主键(,Hibernate认为该实体处于分离状态。在这个阶段,Hibernate是一个疑问。若要 100% 确认实体处于分离状态,数据库中应有一条与实体标识符对应的记录

瞬态表示新记录。当某个实体被视为处于暂时状态时,数据库中不应有与该实体的标识符对应的可用记录。

最新更新