有没有办法查询 JPA EntityManager是否已分离给定实体?这篇 SO 帖子正在讨论一个类似的问题,但并未指出一种在 JPA EntityManager中查询实体分离状态的方法。我更喜欢 JPA 方式,否则是特定于 Hibernate 的。
问问题
42010 次
2 回答
48
要检查给定实体是否由当前管理,PersistenceContext
您可以使用EntityManager#contains(Object entity)
.
于 2012-10-30T14:30:32.050 回答
24
Piotr Nowicki 的回答提供了一种确定实体是否被管理的方法。要确定一个实体是否已分离,我们需要知道它是否以前被管理过(即来自数据库,例如通过持久化或从find
操作中获取)。Hibernate 不提供“实体状态历史”,所以简短的回答是没有 100% 可靠的方法来做到这一点,但在大多数情况下,以下解决方法应该足够了:
public boolean isDetached(Entity entity) {
return entity.id != null // must not be transient
&& !em.contains(entity) // must not be managed now
&& em.find(Entity.class, entity.id) != null; // must not have been removed
}
以上假设 ,是em
实体类,并且有一个作为主键的公共字段。(它还假定在实体分离后的时间内,外部进程尚未从数据库表中删除具有此 ID 的行。)EntityManager
Entity
id
@GeneratedValue
于 2016-11-10T09:41:26.813 回答