JPA / Hibernate - 使用唯一约束作为主键

时间:2016-03-03 11:09:53

标签: java hibernate jpa uniqueidentifier identifier

我有以下问题,我有一个已经存在的表有三个字段field1,field2,field3。 Field1实际上是另一个表的外键( @OneToOne )。所有field2和field3都可以为null,因此我无法为所有三个字段设置主键。在数据库中,field1 + field2 + field3有一个UniqueConstraint。

field1 | field2 | field 3
 1     |   1    |   null
 1     |  null  |   2
 3     |   1    |   null

我尝试过使用JPA / Hibernate的几个解决方案,但找不到好的解决方案。 没有定义 @Id JPA无法正常工作(当然)。在 @Embeddable 中定义三个字段并将其与 @EmbeddedId 一起使用会在所有三个不允许空值的字段上创建主键。

除了更改现有表并为每行添加自动生成的ID之外,还有其他解决方案吗?

非常感谢你&最好的问候!

1 个答案:

答案 0 :(得分:0)

你试过如下吗?

@Table(
    name="xxx", 
    uniqueConstraints=
        @UniqueConstraint(name="my_unique_key", columnNames={"field1", "field2", "field3"})
)