Hibernate 的关系映射3 One2Many

一对多关联(学生与所修课程的关系)

多对一关联映射:是在多的一端添加一个外键维护多指向一的关联引用

一对多关联映射:是在多的一端添加一个外键维护一指向多的关联引用

也就是说,一对多和多对一的映射策略是一致的,只是站的角度不同

单向关联

缺点:

更新student表中的classid字段时,需要对每一个student发出一个updatesql来更新classid字段

如果将t_student表中的classid设置为非空,则不能保存student数据,因为关系是由classes维护的,在保存student时,还没有对应的classid被生成。

Hibernate: insert into t_student (name) values (?)

Hibernate: update t_student set classid=? where id=?

Classes.hbm.xml

<hibernate-mapping>

    <class name="com.hibernate.onetomany1.Classes" table="t_classes">

       <id name="id">

           <generator class="native"/>

       </id>

       <property name="name"/>

        <set name="students">

           <key column="classid"/>

           <one-to-many class="com.hibernate.onetomany1.Student"/>

       </set>

    </class>

</hibernate-mapping>

Student.hbm.xml

<hibernate-mapping>

    <class name="com.hibernate.onetomany1.Student" table="t_student">

       <id name="id">

           <generator class="native"/>

       </id>

       <property name="name"/>

    </class>

</hibernate-mapping>

 

双向关联

一对多双向关联映射的方法:

在一的一端:在集合标签里面使用<key>标签来表明需要在对方的表中添加一个外键指向一的一端。

在多的一端:使用<many-to-one>标签来映射。

需要注意:<key>标签所指定的外键字段名需要与<many-to-one>标签定义的外键字段名一致,否则便会造成引用数据的

丢失!

注意:

如果从一端来维护一对多双向关联的关系,hibernate会发出多余的update语句,所以

一般地情况下,我们便会从多一端来维护其关联关系!

Classes.hbm.xml

<hibernate-mapping>

    <class name="com.hibernate.onetomany2.Classes" table="t_classes2">

       <id name="id">

           <generator class="native"/>

       </id>

       <property name="name"/>

        <set name="students" >

           <key column="classid"/>

           <one-to-many class="com.hibernate.onetomany2.Student"/>

       </set>

    </class>

</hibernate-mapping>

Student.hbm.xml

<hibernate-mapping>

    <class name="com.hibernate.onetomany2.Student" table="t_student2">

       <id name="id">

           <generator class="native"/>

       </id>

       <property name="name"/>

       <many-to-one name="classes" column="classid"/>

    </class>

</hibernate-mapping>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值