【Hibernate】——一对一映射

来源:互联网 发布:蕉下伞是一场骗局知乎 编辑:程序博客网 时间:2024/06/04 20:14

        好吧,一对一映射是我认为最好理解的,正如我说的一个萝卜一个坑,或者实际一点的例子:一个人只有一个

身份证号:

            

         新建一个Person实体对象:

package com.bjpowernode.hibernate;/** * 建立Person实体类 * @author why_768 * */public class Person {private int id;private String name;private IdCard idCard;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public IdCard getIdCard() {return idCard;}public void setIdCard(IdCard idCard) {this.idCard = idCard;}}

          配置Person.hbm.xml映射文件:

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.bjpowernode.hibernate.Person" table="t_person"><id name="id"><!-- 采用foreign生成策略,会取得关联对象的标识 --><generator class="foreign"><param name="property">idCard</param></generator></id><property name="name"/><!-- constrained=“true”表示,当前主键还是一个外键 --><one-to-one name="idCard" constrained="true"/></class></hibernate-mapping>

          新建IdCard实体类:

package com.bjpowernode.hibernate;public class IdCard {private int id;private String CardNo;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getCardNo() {return CardNo;}public void setCardNo(String cardNo) {CardNo = cardNo;}}

         配置IdCard.hbm.xml映射文件:

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="com.bjpowernode.hibernate.IdCard" table="t_idCard">        <id name="id">            <generator class="native"/>        </id>        <property name="cardNo"/>            </class></hibernate-mapping>

         这样就完成了一对一的简单配置,建立Junit测试类,插入数据:

public void testSave1(){Session session = null;try {session = HibernateUtils.getSession();session.beginTransaction();IdCard idCard = new IdCard();idCard.setCardNo("111111111111");Person person = new Person();person.setName("张三");//建立关联person.setIdCard(idCard);//没有抛出TransientObjectException异常,是由一对一关联映射的特性决定的。//这样他采用foreign映射策略才能取得关联对象的标识session.save(person);session.getTransaction().commit();} catch (Exception e) {e.printStackTrace();session.getTransaction().rollback();} finally{HibernateUtils.closeSession(session);}}

         查看数据库:



         至此,一对一的单向关联映射就完成了。一对一的双向关联映射,根据上篇博客说道的一对多双向关联映射可

知,在IdCard实体里添加Person为属性,并在IdCard.hbm.xml文件里再配上<one-to-one name="person">标签就可

以了。


0 0
原创粉丝点击