对多个字段设置唯一约束

时间:2013-05-06 15:12:24

标签: java jpa jpa-2.0 openjpa

假设我有一个这样的实体:

@Entity
public Foo {
    @Id
    private Long id;

    private String name;

    private String type;

    ...
}

有没有办法表达名称和类型应该是唯一的? 例如,您可以使用类型为“y”的名称“x”和类型为“z”的名称“x”,而不是类型为“y”的其他“x”。

@EmbeddedId没有这个技巧,因为名称可以在以后更改 - 但是在实体的整个生命周期中,类型保持不变。

1 个答案:

答案 0 :(得分:2)

您可以在@Table注释上为您的实体添加约束。在您的情况下,您希望使两个连接的字段唯一。您可以使用@UniqueConstraint注释。

@Entity
@Table(uniqueConstraints=
           @UniqueConstraint(columnNames = {"name", "type"}) 
public Foo {
    @Id
    private Long id;
    @Column
    private String name;
    @Column    
    private String type;

    ...
}

Take a look at the javadoc for @UniqueConstraint