使用生成的ID安全地保存新JPA实体的最佳实践

时间:2012-07-30 08:43:42

标签: java jpa jpa-2.0

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

此外,我认为您不需要这样简单查询的标准,并且在大多数情况下,额外查询的成本不会非常昂贵。