何时持久对象变得分离

时间:2015-03-21 10:46:34

标签: java hibernate jpa

当有一个持久对象成为一个分离的对象时,有人可以帮我理解一个例子吗?

3 个答案:

答案 0 :(得分:3)

在以下情况下会脱离:

  1. 您明确调用.detach()
  2. 关闭会话
  3. 关闭实体经理

答案 1 :(得分:2)

取决于您正在使用的持久性上下文(事务或扩展)。有关说明,请参阅this link。基本上按照其他答案除了在使用事务PersistenceContext时提交事务时答案错过了分离

答案 2 :(得分:1)

我认为对实体分离的最佳理解是关注JPA规范对实体生命周期的看法。

  

分离的实体实例是具有持久性标识的实例,该实体不与(或不再)与持久性上下文相关联。

这意味着即使是新创建的实体,也可以将其视为已分离。假设我们的实体A的ID标记为@Id @GeneratedValue。因此,JPA提供商基本上会负责分配ID。但是,如果您明确指定A的ID(例如a.setId(1)),然后将其传递给persist(),您将获得例外。