Java 冬眠。如何为字段组合添加唯一索引?
我有以下hibernate映射:Java 冬眠。如何为字段组合添加唯一索引?,java,hibernate,jpa,constraints,unique,Java,Hibernate,Jpa,Constraints,Unique,我有以下hibernate映射: @Entity public class UserPattern { @Id @GeneratedValue Integer id; @ManyToOne @JoinColumn(name = "user_id") User user; @ManyToOne @JoinColumn(name = "patern_id") Pattern pattern; ... } hibe
@Entity
public class UserPattern {
@Id
@GeneratedValue
Integer id;
@ManyToOne
@JoinColumn(name = "user_id")
User user;
@ManyToOne
@JoinColumn(name = "patern_id")
Pattern pattern;
...
}
hibernate是否允许添加唯一索引,即
用户
和模式
的组合是唯一的?我认为它会起作用:
@Table(name="UserPattern",
uniqueConstraints=
@UniqueConstraint(columnNames={"user_id", ""})
或
你可以看看:
5.1.8。自然身份证
尽管我们建议使用代理键作为主键,但您应该尝试为所有实体标识自然键。自然密钥是唯一且非空的属性或属性组合。它也是不变的。将自然密钥的属性映射为@naturaid
,或将它们映射到
元素中。Hibernate将生成必要的唯一键和可空性约束,因此,您的映射将更加自我记录
但是请注意,关于不变性的条款-这可能不适合您的用例
@Entity
public class UserPattern {
@Id
@GeneratedValue
Integer id;
@ManyToOne
@JoinColumn(name = "user_id")
@NaturalId
User user;
@ManyToOne
@JoinColumn(name = "patern_id")
@NaturalId
Pattern pattern;
...
}
我想你可以在
@列中使用唯一的参数
像这样:
@列(name=“user\u name”,unique=true)
字符串用户名;
它是UniqueConstraint
的快捷方式,您可以在说明中看到:
/**
*(可选)列是否为唯一键。这是一个
*表中的UniqueConstraint
注释的快捷方式
*级别,并且对于唯一关键点约束
*仅对应于单个列。此约束适用
*除了主键映射和
*在表级别指定的约束。
*/
布尔唯一()默认值为false;
annotation attribute Table.uniqueConstraints的值必须是some@javax.persistence.UniqueConstraint annotationEclipse(像我一样)混淆了注释中的注释,这是一个唯一的约束,如SQL:“ADD constraint UserPattern unique…”。但是像SQL这样的唯一索引呢:“在…上创建唯一索引用户模式…”?
@Entity
public class UserPattern {
@Id
@GeneratedValue
Integer id;
@ManyToOne
@JoinColumn(name = "user_id")
@NaturalId
User user;
@ManyToOne
@JoinColumn(name = "patern_id")
@NaturalId
Pattern pattern;
...
}