一对多:
![]()


类 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 属性值 要一致。