java - 使用生成的 Id 安全地持久保存新 JPA 实体的最佳实践

标签 java jpa jpa-2.0

当根据用户输入创建新实体时,我无法确定没有其他实体具有相同的数据。我能够找到的唯一示例使用了预定义的 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/

相关文章:

java - 如何实现具有2个独立键的 map ?

java - JPA/JSP/EJB : How to create tables from entities?

java - 当 fetch=FetchType.LAZY 时 Hibernate 断开代理

java - 直接在 JPA/JPQL 中将行插入连接表?

java - JPA2.0中的@OneToOne单向映射——持久化时出现SQL错误

java - 安卓 HTTP 异常

java - Apache Tomcat-9.0.16 将属性 'maxConcurrentStreamExecution' 设置为 '100' 没有找到匹配的属性

java - 不同参数类型和数量的接口(interface)

hibernate - Spring Data JPA、Hibernate Vendor、 Multi-Tenancy 和 Postgresql

jpa-2.0 - 无法从 HSQLDB 生成 JPA 实体