双向一对一唯一外键关联
来源:互联网 发布:郑州淘大网络 编辑:程序博客网 时间:2024/06/06 11:04
原理跟单向一对一唯一外键关联是一样的,都是加个外键,影响的只是对象模型
一对一唯一外键关联双向采用<one-to-one>标签映射,必须指定<one-to-one>标签中的property-ref属性为关系字段的名称
对象模型如下:
public class Person {
private int id;
private String name;
private IdCard idCard;
}
public class IdCard {
private int id;
private String cardNo;
private Person person;
}
具体映射如下:
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>
idCard.hbm.xml
<hibernate-mapping>
<class name="com.bjpowernode.hibernate.IdCard" table="t_idCard">
<id name="id">
<generator class="native"/>
</id>
<property name="cardNo"/>
<!-- 表示指向person表中的idCard字段,这样来进行关联 -->
<one-to-one name="person" property-ref="idCard"/>
</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);
}
}
public void testLoad2() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
IdCard idCard = (IdCard)session.load(IdCard.class, 1);
System.out.println("idCard.cardNo=" + idCard.getCardNo());
System.out.println("idCard.person.name=" + idCard.getPerson().getName());
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}
}
- 一对一唯一外键关联(单双向)
- 双向一对一唯一外键关联
- 一对一唯一外键关联映射(双向)
- 九、Hibernate一对一唯一外键关联(双向关联)
- hibernate一对一唯一外键关联映射(双向关联PersonIdCard)
- 一对一唯一外键关联(单向)
- Hibernate一对一关联(唯一外键)
- 9. 一对一唯一外键关联映射
- hibernate一对一唯一外键关联
- NH一对一(唯一外键关联)
- 单向一对一唯一外键关联
- 单向一对一唯一外键关联实例
- 单向一对一唯一外键关联实例
- 单向一对一唯一外键关联实例
- hibernate一对一唯一外键关联
- hibernate一对一唯一外键关联
- 【Hibernate】一对一唯一外键关联映射
- Hibernate 一对一外键双向关联
- Service(1)之Context.startService()与Context.bindService()区别 .
- 管道,互斥
- 计算机专业学生需要学习的东西
- 去掉a标签点击后产生的虚线框
- 非常实用分页控件
- 双向一对一唯一外键关联
- eclipse j2ee环境配置
- 求助:关于IoCreateFileSpecifyDeviceObjectHint返回结果是STATUS_INVALID_DEVICE_OBJECT_PARAMETER的问题
- qmail源代码分析之qmail-smtpd.c
- servlet(1)
- 11--struts--保持表单数据
- Java加密技术
- 老大的谈话让我很有压力,IT这行的成就是加班加出来的???
- 在window server 2003中部署mvc3的步骤