JPA:检查实体对象是否已被持久化

Dre*_*mer 13 java ejb jpa java-ee

有没有一般的方法可以

 if(entity is persisted before){
     entity = entity.merge();
 }else{
     entity.persist();
 }
Run Code Online (Sandbox Code Playgroud)

所以包含上述逻辑的方法到处都是安全的吗?

小智 18

如果你需要知道对象已经在持久化上下文中你应该使用contains方法EntityManager.

只能EntityManager告诉你实体是否持久,实体没有这样的信息.

在这里你可以检查javadoc contains方法.

if (!em.contains(entity)) {
  em.persist(entity);
} else {
  em.merge(entity);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果持久化实体已分离,则此方法将不起作用。 (2认同)
  • 正如@Sunnyday 所说,这个答案具有误导性。根据 JPA 规范,“EntityManager”的“contains(..)”方法并未定义为“Entity”实际数据库状态的查找方法,而是定义为持久性上下文中的查找。在我的回答中可以找到进一步的说明:/sf/answers/3438023571/ (2认同)