【发布时间】:2014-05-09 20:32:55
【问题描述】:
正如 JPA 1 和 Hibernate 文档 2 中所述,已删除实体的状态定义如下:
已移除:已移除的实体实例是具有持久身份的实例,与持久性上下文相关联,但计划从数据库中移除。
据我了解,已移除的实体不再管理,这就是EntityManager#contains(Object) 在已移除对象上返回 false 的原因,尽管它们与持久性上下文相关联,并且方法被记录为:
检查实例是否为托管实体实例属于当前持久化上下文。
也就是说,下面两个代码 sn-ps 会产生相同的结果:
// omitted transaction
em.remove(entity);
entity.getId(); // returns the entity id
entity.contains(entity); // false (?)
em.detach(entity);
entity.getId(); // returns the entity id
em.contains(entity); // false
那么我如何确定已删除实体与持久性上下文的关联?如何区分分离的实体和已移除的实体?
【问题讨论】: