关于Hibernate的关联关系及其操作

来源: 作者:IT168 2008-02-01 出处:pcdog.com

hibernate  java  xml  数据库  数据库操作  
上一页 1 2 3 4 5 6 下一页 

    2、 一对多关联/多对一关联
    一对多和多对一关联分为单向关联和双向关联,在此,着重介绍双向关联。假设有两个实体,客户对象(Customer)和订单对象(Order),一个客户可以有多个订单,表现为一对多的关系,一个订单只能属于一个客户,表现为多对一的关系,如图2-1:

关于Hibernate的关联关系及其操作(图四)


图2-1

    下面是Customer和Order所对应的映射文件:
    ● Customer.hbm.xml:

<hibernate-mapping> <class name="hibernate.Customer" table="customer" schema="dbo" catalog="test"> <id name="id" type="java.lang.Long"> <column name="id" /> <generator class="uuid.hex" /> </id> <property name="name" type="java.lang.String"> <column name="name" length="50" not-null="true" /> </property> <set name="Orders" inverse="true" cascade="save-update"> <key> <column name="customer_id" not-null="true" /> </key> <one-to-many class="hibernate.Order" /> </set> </class> </hibernate-mapping>

● Order.hbm.xml:

<hibernate-mapping> <class name="hibernate.Order" table="order" schema="dbo" catalog="test"> <id name="id" type="java.lang.Long"> <column name="id" /> <generator class="uuid.hex" /> </id> <many-to-one name="Customer" class="hibernate.Customer" fetch="select"> <column name="customer_id" not-null="true" /> </many-to-one> <property name="orderName" type="java.lang.String"> <column name="order_name" length="50" not-null="true" /> </property> </class> </hibernate-mapping>
    对于<many-to-one>标签具有column属性,column属性总是和关联类的主键id相对应(对于Order来说,关联类是Customer),因此Hibernate会根据order表中的customer_id以及customer表中设置的id列,取出order.customer_id=customer.id的记录,构造成Customer对象返回给Order类。
   
    Customer对Order是一对多的关系。一对多具有<key column>属性,key标签总是和本身类(在此本身类是Customer)的主键值相对应。在取得Customer对象时,通过Customer的主键id与Order中的customer_id进行匹配,如果customer.id=order.customer_id,则认为此订单是本客户的,于是加载此学生,把学生对象加入Customer对象的订单集合中。
one-to-many 节点有以下属性:lazy 是否采用延迟加载。inverse 用于标识双向关联中的被动方一端,inverse=false的一方(主控方)负责维护关联关系,默认值 为false。cascade 操作级联(cascade)关系,可选值为all : 所有情况下均进行级联操作;none:所有情况下均不进行级联操作;save-update:在执行save-update时进行级联操作。
更多内容请看PCdog.com--Hibernate高级特性  Hibernate相关文章专题
上一页 1 2 3 4 5 6 下一页 
上一篇:构架Java并发模型框架
下一篇:关于Java的Cookie操作