hibernate学习笔记第6讲-一对一主键关联映射one-to-one

 

Hibernate一对一主键关联:

1,单向主键关联:person--------idCard


 

 

Person的主键id作为一个外键参照idCard的主键id。键值都是一样的。

让两个实体的主键id保持相同,这样避免多余字段被创建。

Person.hbm.xml:

<hibernate-mapping>

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

                   <id name="id">

                            //person的主键来源于idCard,共享idCard的主键。

                            <generator class="foreign">

                                     <param name="property">idCard</param>

                            </generator>

                   </id>

                   <property name="name"/>

                  //指示hibernate怎么加载他的关联对象idCard,默认根据主键加载

                   // constrained="true" 表示当前主键存在一个约束,Person的主键id作为一个外键参照idCard的主键id,如果去掉就不会生出外键关联约束

                   <one-to-one name="idCard" constrained="true"/>

         </class>

</hibernate-mapping>

 

IdCard.hbm.xml:

<hibernate-mapping>

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

                   <id name="id">

                            <generator class="native"/>

                   </id>

                   <property name="cardNo"/>

         </class>

</hibernate-mapping>

 

session.beginTransaction();

                           

                            IdCard idCard = new IdCard();

                            idCard.setCardNo("88888888888888");

                           

                            Person person = new Person();

                            person.setName("10");

                            person.setIdCard(idCard);

                           

                            //没有保存idCard

                            //不会出现TransientObjectException异常

                            //因为一对一主键关联映射中,默认了cascade属性

//因为person的主键参考idCard的主键,必须先有idCard

//只有一对一关联映射特殊

                            session.save(person);

                           

                            session.getTransaction().commit();

 

 

2,双向主键关联:person --------idCard



 跟单向关联唯一不同的是:在另一端也加上one-to-one标签

<hibernate-mapping>

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

           <id name="id">

                    <generator class="native"/>

           </id>

           <property name="cardNo"/>

           //指示hibernate如何加载person,默认根据主键加载

         <one-to-one name="person"/>

</class>

</hibernate-mapping>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值