基于唯一键而不是主键在JPA / Hibernate中进行合并

时间:2016-02-25 07:45:22

标签: hibernate jpa unique-constraint jpa-2.1 unique-key

在JPA或Hibernate中,是否可以根据主键以外的唯一键将新实体(没有主键值)合并到持久化上下文中?

或者所有JPA / Hibernate合并仅在主键上执行?

如果通过简单的方法调用无法做到这一点,那么我唯一的选择是:

  1. 使用唯一键替换现有主键
  2. 使用唯一键中的属性值编写查找任何现有实体的代码。如果我这样做,我想我会编写一个查找@UniqueConstraint注释的静态方法,并根据@UniqueConstraint中的属性搜索现有实体。我尝试合并到为@UniqueConstraint找到的第一个实体。如果没有匹配,那么我可以坚持新实体。

1 个答案:

答案 0 :(得分:0)

Hibernate只需要@Id属性的唯一键,虽然通常主键用于此目的,但您可以使用@Id属性的任何唯一键。

此外,您可以使用@Id属性的主键和@NaturalId的唯一键。您可以通过其natural-id获取实体,然后将其合并到不同的Session中,因为合并需要实体而不是标识符。