`

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>

  • 大小: 22.3 KB
  • 大小: 28.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics