Hibernate一对多,多对一,多对多,一对一关系汇总

Hibernate如果上手了,那么所谓的一对多,多对一,多对多,一对一这些关系,应该很快能理解.

下面就把这几种关系简单说一下.
[color=red]本文中用到的三个实例化类分别为Customer(保存客户基本信息),CustomerDetails(保存客户详细信息),CustomerBack(中间表,保存两表之间的关联)
对应的表功能同上.
说明中的主表指Customer,子表指CustomerDetails,中间表指CustomerBack[/color]

一对多

[quote]
<set name="CustomerDetails" table="customer_details"
inverse="false"
cascade="all"
sort="unsorted"
>

<key column="cust_Id"/>
<one to many class="com.hibernate.otm.CustomerDetails"/>
</set> [/quote]

这段代码是需要放在一对多中的主表配置中的
name:集合属性的名称(也可以理解为一对多中那个子属性名)
table(可选,默认为属性的名称):集合表的名称(可理解为一对多中子表的名称)
inverse(可选,默认为false):标记这个集合作为双向关联关系中的方向的一端.
cascade(可选:默认为none):让操作级联到子实体.
sort(可选):指定集合的排序顺序.
其它如schema,lazy,order–by,where,outer–join,batch–size,access请参照有关书籍.

key 中的column=”cust_Id”,cust_Id并不是主表的字段,而是子表中保存主表的字段.
如主表主键为cust_Id,子表中为了保存主表的主键,也建一个cust_Id,key里的cust_Id就是指子表中的cust_Id.
one–to–many 中的class为一对多的子表实例类.

多对一

[quote] <many to one
name="Customer"
class="Customer"
cascade="all"
outer join="false"
update="false"
insert="false"
column="cust_Id"
not null="true"/> [/quote]

多对一中,没有像一对多的,而是直接用了many–to–one.这段代码是需要放在多对一中的子表配置中的(即CustomerDetails的配置中)

outer–join:为外链接
update,insert:指定对应的字段是否在用于UPDATE和/或INSERT的SQL语句中包含.
column:关联的字段名.(多对主类对应的字段名)
not–null:是否为null.

多对多


[quote]<set name="CustomerBack" table="customer_back"
cascade="all">
<key column="cust_Id"/>
<many to many class="CustomerDetails" column="custD_id"/>
</set> [/quote]

多对多的配置与一对多有点类似.这段代码放的位置也是与一对多的代码放的位置一样.
多对多关系中,多采用中间表来关联两个有多多关系的表的.如Customer与CustomerDetails存在多对多的关系,那么往往是用另外一个表如CustomerBack表来保存它们的关系的,也就是中间表.

name:属性的名称(可理解为中间表的名称)
table:表的名称(可理解为中间表的表名称)
key 里的cust_Id,是指中间表的cust_Id,为了保存Customer与CustomerDetails的关系,中间表中分别建了cust_Id(Customer的主键)与custD_Id(CustomerDetails的主键)
many–to–many中的Class是指多对多中的另一个实例化类,column是指CustomerDetails与中间表关联的字段名.这里是指中间表的custD_Id,不能理解为CustomerDetails的主键.

一对一


[quote]<one to one
name="CustomerDetails"
class="CustomerDetails"
cascade="all"
/> [/quote]

一对一的关系更简单.
在Customer表的配置中放上这段代码就行了.
name:属性名称
class:关联的实例化类名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值