如何找出实体在JPA / Hibernate中是否分离?
有没有办法查询 JPA 实体管理器是否分离了给定的实体?这篇 SO 帖子正在讨论类似的问题,但没有指出一种查询 JPA 实体管理器有关实体分离状态的方法。我更喜欢JPA方式,否则是特定于Hibernate的。
有没有办法查询 JPA 实体管理器是否分离了给定的实体?这篇 SO 帖子正在讨论类似的问题,但没有指出一种查询 JPA 实体管理器有关实体分离状态的方法。我更喜欢JPA方式,否则是特定于Hibernate的。
Piotr Nowicki的答案提供了一种确定实体是否被管理的方法。要确定实体是否已分离,我们需要知道它以前是否被管理过(即来自数据库,例如通过持久化或从操作中获取)。Hibernate不提供“实体状态历史记录”,因此简短的答案是没有100%可靠的方法来执行此操作,但在大多数情况下,以下解决方法应该足够了:find
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
}
上面的假设是 ,是实体类,并且有一个作为主键的公共字段。(它还假定在分离实体后的时间内,外部进程尚未从数据库表中删除具有此 ID 的行。em
EntityManager
Entity
id
@GeneratedValue