hibernate 映射关系 一对多/多对一

本文通过具体的类定义及映射文件展示了在面向对象设计中如何实现一对多的关系映射,包括Child类与Toy类之间的关系建立及其数据库表结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一对多:

类 Child:
public class Child   {
       private Integer id ;
       private String childname ;
       private Set<Toy> toys = new HashSet<Toy>();
     ...
映射文件:
       <class name="Child" >
             <id name="id" >
                   <generator class="native" ></generator>
             </id>
             <property name="childname" ></property>
             <set name="toys" >
                   <key column="childId" ></key>
                   <one-to-many class="Toy" />
             </set>
       </class>

类 Toy:
public class Toy {
       private Integer id ;
       private String toyname ;
       private Child child ;
     ...
映射文件:
       <class name="Toy" >
             <id name="id" >
                   <generator class="native" ></generator>
             </id>
             <property name="toyname" ></property>
             <many-to-one name="child" column="childId" class="Child" ></many-to-one>
       </class>

测试后的表结构:

Child



Toy


结论:
   从数据库的考虑
     所谓多对一,就是在另外一张表中(多的一方)有外键只想 另一方。
     在上图标表结构可以看出 toy 表中 没调数据都有指向  child 的 一个外键。
   从面相对象的思想来考虑:
     即 一个Child 对象有多个 Toy对象。所以有在 Chilc 中有集合toys属性。
     同时 一个Toy 对象属于某一个 Child 对象。所有有了 child 属性
注意:
     映射文件 中 set 集合众key 对应的外键(其他表只想 本表的外键)字段。
     so key colum 的属性是有另外一个映射文件决定。colum 属性值 要一致。
     



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值