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