处理一些传统的休眠代码。

如何使用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 标签:

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

文档提取物:

这u003Cproperties>元素允许定义类的命名逻辑分组。该构建体的最重要用途是,它允许属性成为属性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列创建唯一键。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top