如何在hbm中执行多列UniqueConstraint?

Gab*_*iel 25 persistence hibernate 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 Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    private int id;
    private String username;
    private String email;
    private Client client;
}
Run Code Online (Sandbox Code Playgroud)

Thi*_*rry 21

使用properties标签:

...
<properties name="uk1" unique="true">
        <property name="username" .../>
        <many-to-one name="client" .../>
</properties>

<properties name="uk2" unique="true">
        <property name="email" .../>
        <many-to-one name="client" update="false" insert="false" .../>
</properties>
...
Run Code Online (Sandbox Code Playgroud)

文件摘录:

<properties>元素允许定义类属性的命名逻辑分组.构造的最重要用途是它允许属性组合成为property-ref的目标.它也是定义多列唯一约束的便捷方式.

Hibernate文档中描述了所有可用选项.


Sha*_*aee 6

你也可以这样做:

  <many-to-one name="client" unique-key="uk1,uk2" .../>
  <property name="username" unique-key="uk1"  .../>
  <property name="email" unique-key="uk2"  .../>
Run Code Online (Sandbox Code Playgroud)

您不需要在hbm中使用该标记.如果您只想要多个唯一约束.

  • @ankitsuthar我不完全确定你的评论.首先,他用不同的建议添加了一个不同的答案(Atleast在这个特定的问题主题中找不到类似的答案).其次,他事实上为"hbm中的多列唯一约束"问题提供了一个更简单和具体的答案.第三,由于这是一个替代答案,我认为不应该是一个评论. (2认同)