使用唯一约束的一对一映射不能按预期工作

时间:2011-04-12 14:43:30

标签: java hibernate

我正在尝试这种简单的单向一对一关系

人---->地址

使用具有唯一约束的多对一映射。

这是我的映射在Person.hbm.xml中的样子:

<class name="Person" table="PERSON">
<many-to-one name="address" column="ADDRESS_ID" cascade="all" not-null="true" unique="true"/>

我认为这应该只允许每个人一个唯一的地址 - 没有两个人可以共享一个公共地址。

因此,以下代码应该失败。但在这段代码中,Hibernate允许Johns保持同一地址。

    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction transaction = session.beginTransaction();
    Address address = new Address("Bond Street", "London", 121212);
    Person person1 = new Person("John Doe", address);
    Person person2 = new Person("John McClane", address);
    session.save(person1);
    session.save(person2);
    transaction.commit();
    session.close();

请让我知道我在这里失踪了什么?

1 个答案:

答案 0 :(得分:3)

阅读http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#d0e7576,找到第5.1.7.1段中的多对一描述。它说:

  

unique(可选):启用DDL   生成一个独特的约束   外键列。通过允许   这是一个目标   property-ref,你可以做到   关联多样性一对一。

这意味着Hibernate的数据库模式生成工具使用它来添加唯一约束。如果您不使用它,那么您必须自己添加此约束。