处理一些遗留的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;
}
答案 0 :(得分: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>
...
文件摘录:
中描述了所有可用选项&lt; properties&gt; element允许定义一个named, 类的属性的逻辑分组。最重要的用途 构造的结果是它允许属性的组合 属性的目标 - 参考。它也是定义a的便捷方式 多列唯一约束。
答案 1 :(得分:6)
你也可以这样做:
<many-to-one name="client" unique-key="uk1,uk2" .../>
<property name="username" unique-key="uk1" .../>
<property name="email" unique-key="uk2" .../>
您不需要在hbm中使用该标记。 如果您只想要多个唯一约束。
答案 2 :(得分:0)
您可以将相同的唯一键属性添加到两个不同的列。这将创建复合唯一键。
<property name="firstName" column="first_name" unique-key="name" />
<property name="lastName" column="last_name" unique-key="name" />
在上面的示例中,将从first_name和last_name列中创建唯一键。