Hibernate 如何在hbm中执行多列唯一约束?

Hibernate 如何在hbm中执行多列唯一约束?,hibernate,persistence,constraints,unique-constraint,hibernate-mapping,Hibernate,Persistence,Constraints,Unique Constraint,Hibernate Mapping,处理一些遗留的hibernate代码 如何使用hbm.xml(hibernate映射文件)而不是注释执行以下操作 @Table(name="users", uniqueConstraints = { @UniqueConstraint(columnNames={"username", "client"}), @UniqueConstraint(columnNames={"email", "client"}) }) public class User implements Seri

处理一些遗留的hibernate代码

如何使用hbm.xml(hibernate映射文件)而不是注释执行以下操作

@Table(name="users", uniqueConstraints = {
    @UniqueConstraint(columnNames={"username", "client"}),
    @UniqueConstraint(columnNames={"email", "client"})
})
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    private int id;
    private String username;
    private String email;
    private Client client;
}

使用
properties
标记:

。。。
...
文件摘录:

元素允许定义命名的, 类属性的逻辑分组。最重要的用途 该构造的一个优点是它允许使用属性的组合 属性-ref的目标。这也是定义 多列唯一约束

所有可用选项都在中介绍。

您也可以执行以下操作:

  <many-to-one name="client" unique-key="uk1,uk2" .../>
  <property name="username" unique-key="uk1"  .../>
  <property name="email" unique-key="uk2"  .../>

您不需要在hbm中使用标签。
如果只需要多个唯一约束

您可以向两个不同的列添加相同的唯一键属性。这将创建复合唯一密钥

<property name="firstName" column="first_name" unique-key="name" />
<property name="lastName" column="last_name" unique-key="name" />


在上面的示例中,将从first_name和last_name列创建唯一键。

您好,我知道文档中是这么说的,但这对我不起作用。解决方案是将
unique
放在
标记中,而不是
属性
标记
我不知道为什么属性标记不适用于您(hibernate版本?),但您的定义将无法建模多列唯一约束。它是hibernate 3,而我给出的解决方案正是我想要的!我们也需要hibernate验证器吗???@soufrk:我不这么认为。这应该是hibernate的核心功能。请先看看这个问题,然后再回答这个问题。显然,您可以在这里添加您的答案。但在回答之前,你需要了解一些要点。首先,不要添加以前添加了相同代码或建议的答案。第二,如果用户已经非常明确地询问了问题以及他需要解决什么问题,那么不要添加过于复杂的答案。第三,如果你想对答案或问题提出任何建议,你可以添加一条评论。@ankitsuthar我不完全确定你的评论。首先,他用不同的建议添加了不同的答案(至少在这个问题线索中我找不到类似的答案)。第二,他实际上为“hbm中的多列唯一约束”问题提供了一个更简单和具体的答案。第三,因为这是一个备选答案,我相信它不应该是一个评论。这个答案对我来说非常有效,我无法使用上面接受的答案指定“约束名称”。但是使用这个答案,我得到了“unique key”标记中指定的约束名称。