Hibernate基于主键和外键的单向一对一的关联映射

来源:互联网 发布:ubuntu的nat和桥接 编辑:程序博客网 时间:2024/06/05 19:26

表结构
这里写图片描述

基于外键单向一对一的关联映射
其实就是多对一中的一种情况,当unique设置为true时候可以设置一对一的关系,即设置外键值唯一
Person和IdCard类

public class Person {    private int id;    private String name;    private int age;    private IdCard idCard;//get…set}
public class IdCard{    private int id;    private String code;    //get…set}

IdCard.hbm.xml

<hibernate-mapping package="cn.siggy.pojo">    <class name="Grade">        <id name="id">            <generator class="native"></generator>        </id>        <property name="code"/>    </class></hibernate-mapping>

person.hbm.xml(重点来了)

<hibernate-mapping package="cn.siggy.pojo"><class name="Person">        <id name="id">            <generator class="native"></generator>        </id>        <property name="name"/>        <property name="age"/>        <!-- 当unique设置为true时候可以设置一对一的关系 -->        <many-to-one name="idCard" class="IdCard" cascade="save-update" column="idCard_Id"          foreign-key="fk_idCard" not-null="true"   unique="true">        </many-to-one>    </class></hibernate-mapping>

测试(session对象的获取封装在HibernateUtil里面)

session = HibernateUtil.getSession();            tx = session.beginTransaction();            IdCard id1 = new IdCard();            id1.setCode("320123231212112");            IdCard id2 = new IdCard();            id2.setCode("110231432423432");            Person person1 = new Person();            person1.setName("贾宝玉");            person1.setAge(23);            person1.setIdCard(id1);            Person person2 = new Person();            person2.setName("林黛玉");            person2.setAge(22);            person2.setIdCard(id2);            Person person3 = new Person();            person3.setName("薛宝钗");            person3.setAge(21);            person3.setIdCard(id2);            session.save(person1);            session.save(person2);            //当保存person3出错            //session.save(person3);            tx.commit();

基于主键单向一对一的关联映射
其实就是Person的主键生成策略变了。
表结构
这里写图片描述
Person和IdCard类

public class Person {    private int id;    private String name;    private int age;    private IdCard idCard;//get…set}
public class IdCard{    private int id;    private String code;    //get…set}

IdCard.hbm.xml

<hibernate-mapping package="cn.siggy.pojo">    <class name="Grade">        <id name="id">            <generator class="native"></generator>        </id>        <property name="code"/>    </class></hibernate-mapping>

person.hbm.xml (重点来了)

<hibernate-mapping package="cn.siggy.pojo">    <class name="Person">         <id name="id">            <!-- foreign表示引用外键 -->            <generator class="foreign">                <!-- 引用idCard属性所对应的主键 -->                <param name="property">idCard</param>            </generator>        </id>        <property name="name"/>        <property name="age"/>        <!-- 一对一 -->        <one-to-one name="idCard" constrained="true" cascade="save-update"/>    </class></hibernate-mapping>
阅读全文
0 0
原创粉丝点击