如何知道已分离的JPA实体是否已被保留?
我的应用程序的Web UI层中有一个JPA实体实例。 我想随时知道这个实体是否已经存在于数据库中,或者它是否仅存在于用户会话中。
它将在业务层,我会使用entitymanager.contains(Entity)方法,但在我的UI层中,我认为我需要一个额外的属性来指示实体是否已被保存。 怎么实现呢? 我正在考虑暂时关注选项:
- 具有由数据库设置的默认值的JPA属性,但在每次更新后会强制执行新读取吗?
- 在我的代码中手动设置或由JPA自动设置的非JPA属性?
有什么建议/其他建议吗?
我正在使用JPA 1与Hibernate 3.2实现,并希望坚持标准。
首先,让我们提醒一个实体的各种状态。 从JPA 1.0规范(在3.2实体实例的生命周期中):
本节介绍用于管理实体实例生命周期的EntityManager操作。 实体实例可以被表征为新的,管理的,分离的或被移除的。
- 新实体实例没有持久标识 ,但尚未与持久性上下文关联。
- 托管实体实例是具有持久标识的实例,该标识当前与持久性上下文相关联。
- 分离的实体实例是具有持久性标识的实例,该实体不与(或不再)与持久性上下文相关联。
- 已删除的实体实例是具有持久性标识的实例,该持久性标识与持久性上下文相关联,计划从数据库中删除。
还有一个图解说明:
因此,根据定义,已经保留了一个分离的实体,我实际上并不认为这是您真正的问题。 现在,如果你想知道一个实体是否是新的 (即没有任何持久性身份),那么这个:
@Transient public boolean isNew() { return (this.id == null); }