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