hibernate_many-to-many

<set name="students"
           table="course_student_table"
           cascade="save-update"
           inverse="true">
           <key column="cou_id"></key>
           <many-to-many class="org.eimhe.db.Student" column="stu_id"></many-to-many>
           </set> 

 

 

  <set name="courses"
           table="course_student_table"
           cascade="save-update"
           inverse="false">
           <key column="stu_id"></key>
           <many-to-many class="org.eimhe.db.Course" column="cou_id"></many-to-many>
           </set>

 

对多关联(many-to-many association) 使用 <many-to-many>元素定义.

<many-to-many        column="column_name"                               (1)        formula="any SQL expression"                       (2)        class="ClassName"                                  (3)        fetch="select|join"                                (4)        unique="true|false"                                (5)        not-found="ignore|exception"                       (6)        entity-name="EntityName"                           (7)        property-ref="propertyNameFromAssociatedClass"     (8)        node="element-name"        embed-xml="true|false"    />
(1)

column(可选): 这个元素的外键关键字段名

(2)

formula (可选): 用于计算元素外键值的SQL公式.

(3)

class (必需): 关联类的名称

(3)

outer-join (可选 - 默认为auto): 在Hibernate系统参数中hibernate.use_outer_join被打开的情况下,该参数用来允许使用outer join来载入此集合的数据。

(4)

为此关联打开外连接抓取或者后续select抓取。这是特殊情况;对于一个实体及其指向其他实体的多对多关联进全预先抓取(使用一条单独的SELECT),你不仅需要对集合自身打开join,也需要对<many-to-many>这个内嵌元素打开此属性。

(5)

对外键字段允许DDL生成的时候生成一个惟一约束。这使关联变成了一个高效的一对多关联。(此句存疑:原文为This makes the association multiplicity effectively one to many.)

(6)

not-found (可选 - 默认为 exception): 指明引用的外键中缺少某些行该如何处理: ignore 会把缺失的行作为一个空引用处理。

(7)

entity-name (可选): 被关联的类的实体名,作为class的替代。

(8)

property-ref: (可选) 被关联到此外键(foreign key)的类中的对应属性的名字。若未指定,使用被关联类的主键。

例子:首先, 一组字符串:

<set name="names" table="NAMES">    <key column="GROUPID"/>    <element column="NAME" type="string"/></set>

包含一组整数的bag(还设置了order-by参数指定了迭代的顺序):

<bag name="sizes"         table="item_sizes"         order-by="size asc">    <key column="item_id"/>    <element column="size" type="integer"/></bag>

一个实体数组,在这个案例中是一个多对多的关联(注意这里的实体是自动管理生命周期的对象(lifecycle objects),cascade="all"):

<array name="addresses"         table="PersonAddress"         cascade="persist">    <key column="personId"/>    <list-index column="sortOrder"/>    <many-to-many column="addressId" class="Address"/></array>

一个map,通过字符串的索引来指明日期:

<map name="holidays"         table="holidays"         schema="dbo"         order-by="hol_name asc">    <key column="id"/>    <map-key column="hol_name" type="string"/>    <element column="hol_date" type="date"/></map>

一个组件的列表:(下一章讨论)

<list name="carComponents"         table="CarComponents">    <key column="carId"/>    <list-index column="sortOrder"/>    <composite-element class="CarComponent">        <property name="price"/>        <property name="type"/>        <property name="serialNumber" column="serialNum"/>    </composite-element></list>

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值