休眠。如何为字段组合添加唯一索引?

问题描述 投票:6回答:3

我有以下休眠映射:

@Entity
public class UserPattern {
    @Id
    @GeneratedValue
    Integer id;

    @ManyToOne
    @JoinColumn(name = "user_id")
    User user;

    @ManyToOne
    @JoinColumn(name = "patern_id")
    Pattern pattern;

    ...
}

休眠允许添加userpattern的组合是唯一的唯一索引吗?

java hibernate jpa constraints unique
3个回答
7
投票

我认为它将起作用:

@Table(name="UserPattern", 
    uniqueConstraints=
        @UniqueConstraint(columnNames={"user_id", ""})

@Table(name="UserPattern",  uniqueConstraints={
   @UniqueConstraint(columnNames={"user_id", "patern_id"})
})

4
投票

您可以看一下@NaturalId

5.1.8。天然ID

尽管我们建议使用代理键作为主键,但您应尝试识别所有实体的自然键。自然键是唯一或非空的属性或属性组合。这也是不可变的。将自然键的属性映射为@NaturalId或将其映射到@NaturalId元素内。 Hibernate将生成必要的唯一键和可为空性约束,因此,您的映射将更具自记录性。

但是请注意,关于不变性的子句-这可能不适合您的用例。

<natural-id>

0
投票

我想你可以在@Entity public class UserPattern { @Id @GeneratedValue Integer id; @ManyToOne @JoinColumn(name = "user_id") @NaturalId User user; @ManyToOne @JoinColumn(name = "patern_id") @NaturalId Pattern pattern; ... } 中使用unique参数像这样:

@Column

这是@Column(name = "user_name", unique = true) String username; 的快捷方式,您可以在说明中看到它:

UniqueConstraint
© www.soinside.com 2019 - 2024. All rights reserved.