我有以下hibernate映射:
@Entity
public class UserPattern {
@Id
@GeneratedValue
Integer id;
@ManyToOne
@JoinColumn(name = "user_id")
User user;
@ManyToOne
@JoinColumn(name = "patern_id")
Pattern pattern;
...
}
hibernate是否允许添加user
和pattern
组合唯一的唯一索引?
答案 0 :(得分:6)
我认为它会起作用:
@Table(name="UserPattern",
uniqueConstraints=
@UniqueConstraint(columnNames={"user_id", ""})
或
@Table(name="UserPattern", uniqueConstraints={
@UniqueConstraint(columnNames={"user_id", "patern_id"})
})
答案 1 :(得分:3)
您可以查看@NaturalId
:
<强> 5.1.8。天然-ID 强>
虽然我们建议使用代理键作为主键,但您应该尝试识别所有实体的自然键。自然键是属性或属性的组合,它们是唯一且非空的。它也是不可改变的。将自然键的属性映射为
@NaturalId
或将其映射到<natural-id>
元素内。 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;
...
}
答案 2 :(得分:0)
我猜你可以在unique
中使用@Column
参数
像这样:
@Column(name = "user_name", unique = true)
String username;
这是UniqueConstraint
的快捷方式,如您在说明中所见:
/**
* (Optional) Whether the column is a unique key. This is a
* shortcut for the <code>UniqueConstraint</code> annotation at the table
* level and is useful for when the unique key constraint
* corresponds to only a single column. This constraint applies
* in addition to any constraint entailed by primary key mapping and
* to constraints specified at the table level.
*/
boolean unique() default false;