Java Hibernate中嵌入成员成员的唯一约束
是否可以在Hibernate中定义嵌入类成员的唯一约束 我需要确保Nested::i1和Nested::i2作为一对(组合)是唯一的Java Hibernate中嵌入成员成员的唯一约束,java,hibernate,jpa,Java,Hibernate,Jpa,是否可以在Hibernate中定义嵌入类成员的唯一约束 我需要确保Nested::i1和Nested::i2作为一对(组合)是唯一的 可以通过使用: @Entity @Table(uniqueConstraints = { @UniqueConstraint(columnNames = {"i1", "i2"})}) public class Widget { 它将导致CREATESQL(postgresql示例) 可选-当您在一个文件中添加@AttributeOverride注释规范时(两个
可以通过使用:
@Entity
@Table(uniqueConstraints = { @UniqueConstraint(columnNames = {"i1", "i2"})})
public class Widget {
它将导致CREATE
SQL(postgresql示例)
可选-当您在一个文件中添加@AttributeOverride
注释规范时(两个属性的列名),可能会更为简洁易读
@AttributeOverrides({
@AttributeOverride(name = "i1", column = @Column(name = "i1")),
@AttributeOverride(name = "i2", column = @Column(name = "i2"))
})
@Embedded
Nested nested;
Thnaks,这太棒了。我非常担心的一件事是,如果
Nested
的字段名更改,任何将其用作嵌入式的类都会出现问题。。。有解决这个问题的模式吗?@JoshuaMN不幸的是,没有解决这个问题的模式,但是嵌套的
类的字段更改名称的可能性很小,假设使用嵌入式类的目的是这样的。您也可以放弃@AttributeOverride
的想法,因为在本例中,它并不意味着什么(我只是认为使用它时代码更为贴切)。
create table Widget
( id int8 not null,
i1 int8,
i2 int8 ,
primary key (id),
unique (i1, i2)
)
@AttributeOverrides({
@AttributeOverride(name = "i1", column = @Column(name = "i1")),
@AttributeOverride(name = "i2", column = @Column(name = "i2"))
})
@Embedded
Nested nested;