基于唯一键而不是主键的JPA/Hibernate中的合并

基于唯一键而不是主键的JPA/Hibernate中的合并,hibernate,jpa,unique-constraint,jpa-2.1,unique-key,Hibernate,Jpa,Unique Constraint,Jpa 2.1,Unique Key,在JPA或Hibernate中,是否可以基于主键以外的唯一键将新实体(没有主键值)合并到持久性上下文中 还是所有JPA/Hibernate合并都只在主键上执行 如果一个简单的方法调用无法实现这一点,那么我只能选择: 将现有主键替换为唯一键 编写代码,使用唯一键中的属性值查找任何现有实体。如果我要这样做,我想我会编写一个静态方法,查找@UniqueConstraint注释,并根据@UniqueConstraint中的属性搜索现有实体。我会尝试合并到为任何@UniqueConstraint找到的第一

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

还是所有JPA/Hibernate合并都只在主键上执行

如果一个简单的方法调用无法实现这一点,那么我只能选择:

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

  • Hibernate只需要
    @Id
    属性的唯一键,并且,尽管通常主键用于此目的,但是您可以为
    @Id
    属性使用任何唯一键

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