当根据用户输入创建新实体时,我无法确定没有其他实体具有相同的数据。我能够找到的唯一示例使用了预定义的 Id,因此可以通过调用 entityManager.find(id)
检查实体是否存在。如果生成了 id,我看到了几种安全持久的方法:
- 调用
entityManager.persist
并希望得到最好的结果 - 捕获EntityExistsException
并吞掉它或显示错误消息 - 调用
entityManager.merge
并让 JPA 进行检查...它会始终正常工作吗? - 通过查询 - jPQL 或条件搜索实体,如果未找到,则调用
entityManager.persist
我的直觉是采用第三种方法,但是还有更好的方法吗?
我正在使用 JPA 2,并且希望避免特定于供应商的解决方案(例如 Hibernate 的SessionManager.saveOrUpdate
)
最佳答案
如果你真的无法预测新生成的 ID 是否是唯一的,我肯定会采用第三种方法。
此外,我认为对于如此简单的查询您不需要 Criteria,而且在大多数情况下,额外查询的成本不会很高。
关于java - 使用生成的 Id 安全地持久保存新 JPA 实体的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11718008/