011一对一 唯一外键关联映射_单向(one-to-one)

时间:2014-11-06 10:48:54   收藏:0   阅读:176

²  两个对象之间是一对一的关系,如Person-IdCard(人—身份证号)

²  有两种策略可以实现一对一的关联映射

实例场景:人—-> 身份证号(PersonàIdCard),从IdCard看不到Person对象

 

bubuko.com,布布扣

 

对象模型实体类与一对一主键关联实体类相同,没有变化。

IdCard实体映射文件与主键关联映射文件相同:

<hibernate-mapping>

    <class name="com.wjt276.hibernate.IdCard" table="t_idcard">

        <id name="id" column="id">

            <generator class="native"/>

        </id>

        <property name="cardNo"/>

    </class>

</hibernate-mapping>

Person实体类映射文件:

 

<hibernate-mapping>

    <class name="com.wjt276.hibernate.Person" table="t_person">

        <id name="id" column="id">

            <generator class="native"/>

        </id>

        <property name="name"/> 

<!-- <many-to-one>:在多的一端(当前Person一端),加入一个外键(当前为idCard)指向一的一端(当前IdCard),但多对一 关联映射字段是可以重复的,所以需要加入一个唯一条件unique="true",这样就可以此字段唯一了。-->

        <many-to-one name="idCard" unique="true"/>

    </class>

</hibernate-mapping>

导出至数据库生成表SQL语句如下:

create table t_idcard (id integer not null auto_increment, cardNo varchar(255), primary key (id))

create table t_person (id integer not null auto_increment, name varchar(255), idCard integer unique, primary key (id))

alter table t_person add index FK785BED80BE010483 (idCard), add constraint FK785BED80BE010483 foreign key (idCard) references t_idcard (id)

bubuko.com,布布扣

一对一 唯一外键 关联映射存储测试:

session = HibernateUtils.getSession();

            tx = session.beginTransaction();

 

            IdCard idCard = new IdCard();

            idCard.setCardNo("88888888888888888888888");

            /**

             * 如果先不保存idCard,则出抛出Transient异常,因为idCard不是持久化状态。

             */

            session.save(idCard);

           

            Person person = new Person();

            person.setName("菜10");

            person.setIdCard(idCard);

 

            session.save(person);

 

            // 提交事务

            tx.commit();

 

 

 

 

产生SQL语句:

Hibernate: insert into t_idcard (cardNo) values (?)

Hibernate: insert into t_person (name, idCard) values (?, ?)

总结:

一对一 唯一外键关联映射得 多对一 关联映射的特例,

       可以采用<many-to-one>标签,指定多的一端的unique=true,这样的化就限制了多的一端的唯一。就是通过这种手段映射一对一 唯一外键关联。

 

原文:http://www.cnblogs.com/crazylqy/p/4077952.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!