java - 对多个字段施加唯一约束

标签 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 并不能解决问题,因为名称可以稍后更改 - 但类型在实体的整个生命周期中保持不变。

最佳答案

您可以在 @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 .

关于java - 对多个字段施加唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16401751/

相关文章:

datetime - 将日期时间列的日期部分与 NamedQuery 进行比较

json - Postgres JSON 类型的 JPA2/Hibernate Criteria 或 CriteriaQuery

java - 持久化没有 ID 的第三方类

java - 使用接口(interface)或抽象的设计模式

hibernate - 如何使用分组进行条件查询

java - 如何动态声明实体?

java - 两个实体上的 JPA/Hibernate 双向 Set<Object>

java - 更改添加到堆栈的变量的值而不更改堆栈?

java - 我可以将对象用作java中方法的变量吗?

java - 在运行时设置 ENUM 值