如何在hbm中做多列UniqueConstraint?
Posted
技术标签:
【中文标题】如何在hbm中做多列UniqueConstraint?【英文标题】:How to do multiple column UniqueConstraint in hbm? 【发布时间】:2011-02-14 00:39:17 【问题描述】:处理一些遗留的休眠代码。
如何使用 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;
【问题讨论】:
【参考方案1】:使用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>
...
文档摘录:
元素允许定义一个命名的, 类属性的逻辑分组。最重要的用途 该构造的最大特点是它允许将属性组合为 属性引用的目标。这也是一种方便的方式来定义 多列唯一约束。
Hibernate documentation 中描述了所有可用选项。
【讨论】:
嗨,我知道文档是这么说的,但这对我不起作用。解决方案是将unique
放入column
标签而不是property
标签<property name="login" type="string"> <column length="45" name="Login" unique="true"/> </property>
我不知道为什么属性标签对您不起作用(休眠版本?),但您的定义将无法为多列唯一约束建模。
它是 Hibernate 3,我提供的解决方案正如我所愿!
我们还需要 hibernate-validator 吗??
@soufrk :我不这么认为。应该是hibernate的核心功能【参考方案2】:
你也可以这样做:
<many-to-one name="client" unique-key="uk1,uk2" .../>
<property name="username" unique-key="uk1" .../>
<property name="email" unique-key="uk2" .../>
您不需要在 hbm 中使用标签。 如果您只想要多个唯一约束。
【讨论】:
请先看这个how-to-answer这个问题之前回答过,显然,你可以在这里添加你的答案。但是在回答之前,您需要了解一些要点。首先,不要添加以前使用相同代码或建议添加的答案。其次,如果用户已经非常具体地询问了问题以及他需要解决什么问题,请不要添加过于复杂的答案。第三,如果您想对答案或问题提出任何建议,可以添加评论。 @ankitsuthar 我不完全确定您的评论。首先,他用不同的建议添加了不同的答案(至少我在这个特定的问题线程中找不到类似的答案)。其次,他实际上为“hbm 中的多列唯一约束”问题提供了一个更简单、更具体的答案。第三,由于这是一个替代答案,我认为它不应该是评论。 这个答案对我来说非常有效,我无法使用上面接受的答案指定“约束名称”。但是使用这个答案,我得到了“唯一键”标签中指定的约束名称。【参考方案3】:您可以将相同的唯一键属性添加到两个不同的列。这将创建复合唯一键。
<property name="firstName" column="first_name" unique-key="name" />
<property name="lastName" column="last_name" unique-key="name" />
在上面的示例中,唯一键将从 first_name 和 last_name 列创建。
【讨论】:
以上是关于如何在hbm中做多列UniqueConstraint?的主要内容,如果未能解决你的问题,请参考以下文章
hibernate.cfg.xml 中如何设置 hbm.xml 和 Annotations 的 mapping