1

从用户输入创建新实体时,我不能确定没有其他实体具有相同的数据。我能够找到的唯一示例使用了预定义的 Id,因此可以通过调用来检查实体是否存在entityManager.find(id)。如果生成了 id,我看到了几种安全持久的方法:

  • 打电话entityManager.persist并希望最好 - 抓住EntityExistsException并吞下它或显示错误消息
  • 打电话entityManager.merge让 JPA 进行检查……它会一直正常工作吗?
  • 通过查询搜索实体 - jPQL 或条件,entityManager.persist如果未找到则调用

我的直觉是采用第三种方法,但还有更好的方法吗?

我正在使用 JPA 2,并希望避免使用特定于供应商的解决方案(如 Hibernate 的SessionManager.saveOrUpdate

4

1 回答 1

1

如果您真的无法预测新生成的 ID 是否唯一,我肯定会采用第三种方法。

此外,我认为您不需要 Criteria 来进行如此简单的查询,并且在大多数情况下,额外查询的成本不会很高。

于 2012-07-30T08:54:26.447 回答