我正在尝试这种简单的单向一对一关系
人---->地址
使用具有唯一约束的多对一映射。
这是我的映射在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();
请让我知道我在这里失踪了什么?
答案 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的数据库模式生成工具使用它来添加唯一约束。如果您不使用它,那么您必须自己添加此约束。