26

处理一些遗留的休眠代码。

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

@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;
}
4

3 回答 3

22

使用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>
...

文档摘录:

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

所有可用的选项都在Hibernate 文档中描述。

于 2010-04-29T23:25:05.130 回答
8

你也可以这样做:

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

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

于 2017-07-17T09:10:25.400 回答
2

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

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

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

于 2019-05-16T07:57:08.040 回答