Yag*_*ght 0 java jpa entitymanager jpa-2.1
我使用了这个JPA:检查实体对象是否已被持久化, 以确定我是否持久化或合并我的实体,它将如下所示:
if (!getEntityManager().contains(entity)) {
System.out.println(" PERSIST ");
} else {
System.out.println(" MERGE ");
}
Run Code Online (Sandbox Code Playgroud)
案例是 - 即使我编辑我的实体 - 它也不会被识别为合并.
怎么可能以及如何使它工作?
根据JPA 2.1规范(PDF第72页),
该EntityManager方法public boolean contains(Object entity):
检查实例是否是属于当前持久性上下文的托管实体实例.
因此,不会针对实际数据库进行检查,而是针对当前的持久性上下文进行检查.
此外,在规范文档的PDF页面86中,我们发现:
该
contains方法返回true:•如果实体已经从数据库中检索或已getReference返回,并没有被删除或脱落.
•如果实体实例是新实例,并且已在实体上调用了persist方法,或者已将persist操作级联到该实体.
该
contains方法返回false:•如果实例已分离.
最有可能的是,在执行代码片段的调用代码时,您有一个分离的实体状态.因此,contains(..)始终评估的调用false.
作为替代方案,您可以使用
public <T> T find(Class<T> entityClass, Object primaryKey)(参见第66页)或 public <T> T getReference(Class<T> entityClass, Object primaryKey) (见第68页)在底层数据库中检查存在是否为元组.您选择上述哪种方法取决于您的代码/应用程序的上下文.
希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |