单向一对一唯一外键关联
来源:互联网 发布:斗鱼抢票软件联系 编辑:程序博客网 时间:2024/06/06 06:42
单向一对一主键关联实际上限制很多,因为你只有IdCard插入了那才能有这个Person.唯一外键关联实际上就是多对一的一个特例,只是加个unique约束而已.
原理图:
采用<many-to-one>标签来映射,指定多的一端unique为true,这样就限制了多的一端的多重性为一,就是这样来映射的。
对象模型:
public class IdCard {
private int id;
private String cardNo;
}
public class Person {
private int id;
private String name;
private IdCard idCard;
}
具体映射如下:
IdCard.hbm.xml
<hibernate-mapping>
<class name="com.bjpowernode.hibernate.IdCard" table="t_idCard">
<id name="id">
<generator class="native"/>
</id>
<property name="cardNo"/>
</class>
</hibernate-mapping>
Person.hbm.xml
<hibernate-mapping>
<class name="com.bjpowernode.hibernate.Person" table="t_person">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="idCard" unique="true"/>
</class>
</hibernate-mapping>
测试如下:
public class One2OneTest extends TestCase {
public void testSave1() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
IdCard idCard = new IdCard();
idCard.setCardNo("1111111111111111");
Person person = new Person();
person.setName("张三");
//建立关联
person.setIdCard(idCard);
//抛出TransientObjectException
//因为IdCard为Transient状态,多对一关联的特例嘛,当然会抛出这样的异常了
session.save(person);
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
public void testSave2() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
IdCard idCard = new IdCard();
idCard.setCardNo("1111111111111111");
session.save(idCard);
Person person = new Person();
person.setName("张三");
//建立关联
person.setIdCard(idCard);
session.save(person);
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
public void testLoad1() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
Person person = (Person)session.load(Person.class, 2);
System.out.println("person.name=" + person.getName());
System.out.println("person.cardNo=" + person.getIdCard().getCardNo());
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
}
- 一对一唯一外键关联(单向)
- 单向一对一唯一外键关联
- 单向一对一唯一外键关联实例
- 单向一对一唯一外键关联实例
- 单向一对一唯一外键关联实例
- 八、Hibernate一对一唯一外键关联(单向关联)
- hibernate一对一唯一外键关联单向映射
- hibernate一对一唯一外键关联映射(单向关联Person----->IdCard)
- 新手上路之Hibernate(四):单向一对一关联映射(主键、唯一外键关联)
- hibernate one-to-one 一对一唯一外键关联映射_单向
- Hibernate 一对一外键单向关联
- Hibernate 一对一外键单向关联
- Hibernate 一对一外键单向关联
- Hibernate 一对一外键单向关联
- Hibernate 一对一外键单向关联
- hibernate一对一外键单向关联实例
- Hibernate 一对一外键单向关联
- Hibernate一对一外键关联映射(单向)
- 每个程序员都应该学习使用Python或Ruby
- python 的django中遇到的小问题(一)
- openGL第四讲——像素格式管理
- ORA-01652 unable to extend temp segment by string in tablespace string
- 80后黑客非法牟利7千万 买写字楼欲扩张
- 单向一对一唯一外键关联
- openGL第五讲——工作流程
- 北风学习 2-2文件保存篇
- iphone中的正则表达式
- openGL第六讲——库函数
- tinyxml的使用
- 如何实现具有层次结构的 TreeView <二> (WPF/TreeView/Style/Template)
- PHP 实现队列类 仅供参考
- android的onUserLeaveHint()见解