类与类之间最普遍的关系就是关联关系,关联映射的本质:将关联关系映射到数据库,所
谓的关联关系是对象模型在内存中的一个或多个引用。
(1)多对一单向关联关系
例如,客户(Customer)和订单(Order)的关系,一个客户能发出多个订单,而一个订
单只能属于一个客户。从 Order 到 Customer 的关系是多对一关系,意味着每个 Order 对象
都会引用一个 Customer 对象。
那么在 Order 的 xml 中要加入
<many-to-one
name="customer"
column="CUSTOMER_ID"
class=" com.fendou.domain.Customer"
not-null="true"
/>
在 Order.hbm.xml 中 <many-to-one> 元 素 建 立 了 Customer 和 ORDERS 表 的 外 键
CUSTOMER_ID 之间的映射。
它包括如下属性。
● name:设定待映射的持久化类的属性名,此处为 Order 类的 customer 属性。
● column : 设 定 和 持 久 化 类 的 属 性 对 应 的 表 的 外 键 , 此 处 为 ORDERS 表 的 外 键
CUSTOMER_ID。
● class:设定持久化类的属性的类型,此处设定 customer 属性为 Customer 类。
● not-null:如果为 ture,表示 customer 属性不能为 null,默认为 false。
映射原理:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一
(2)一对多的单向关联关系
例如,客户(Customer)和订单(Order)的关系,一个客户能发出多个订单,而一个订
单只能属于一个客户。从 Customer 到 Order 的关系是一对多关系,意味着每个 Customer 对
象都会引用一个集合属性存放 Order 对象。
那么在 Customer 的 xml 中要加入
< set name=" orders" >
< key column = " CUSTOMER_ID " />
< one-to-many class = "com.fendou.domain.Order " />
</ set >
此时通过 < key column = " CUSTOMER_ID " /> 在多的一端( Order)添加了一个外键
“CUSTOMER_ID” 指向一的一端。在一的一端通过 orders 维护多的一端。
多对一及一对多关联映射的区别(单向):
不管多对一还是一对多,都是在" 多" 的一端添加一个外键指向" 一" 的一端,只不过是多
对一是在多的一端为其自己添外键,而一对多则是在一的一端为多的一端添加外主键。
评论0