6.2. 集合映射( Collection mappings )

用于映射集合类的Hibernate映射元素取决于接口的类型。比如, <set> 元素用来映射Set类型的属性。

<class name="Product">
    <id name="serialNumber" column="productSerialNumber"/>
    <set name="parts">
        <key column="productSerialNumber" not-null="true"/>
        <one-to-many class="Part"/>
    </set>
</class>

除了&lt;set&gt;,还有&lt;list&gt;, &lt;map&gt;, &lt;bag&gt;, &lt;array&gt;&lt;primitive-array&gt; 映射元素。&lt;map&gt;具有代表性:

<map
    name="propertyName"
    table="table_name"
    schema="schema_name"
    lazy="true|extra|false"
    inverse="true|false"
    cascade="all|none|save-update|delete|all-delete-orphan|delete-orphan"
    sort="unsorted|natural|comparatorClass"
    order-by="column_name asc|desc"
    where="arbitrary sql where condition"
    fetch="join|select|subselect"
    batch-size="N"
    access="field|property|ClassName"
    optimistic-lock="true|false"
    mutable="true|false"
    node="element-name|."
    embed-xml="true|false"
>

    <key .... />
    <map-key .... />
    <element .... />
</map>
1 name 集合属性的名称
2 table (可选——默认为属性的名称)这个集合表的名称(不能在一对多的关联关系中使用)
3 schema (可选) 表的schema的名称, 他将覆盖在根元素中定义的schema
4 lazy (可选--默认为true) 可以用来关闭延迟加载(false),指定一直使用预先抓取,或者打开"extra-lazy" 抓取,此时大多数操作不会初始化集合类(适用于非常大的集合)
5 inverse (可选——默认为false) 标记这个集合作为双向关联关系中的方向一端。
6 cascade (可选——默认为none) 让操作级联到子实体
7 sort(可选)指定集合的排序顺序, 其可以为自然的(natural)或者给定一个用来比较的类。
8 order-by (可选, 仅用于jdk1.4) 指定表的字段(一个或几个)再加上asc或者desc(可选), 定义Map,Set和Bag的迭代顺序
9 where (可选) 指定任意的SQL where条件, 该条件将在重新载入或者删除这个集合时使用(当集合中的数据仅仅是所有可用数据的一个子集时这个条件非常有用)
10 fetch (可选, 默认为select) 用于在外连接抓取、通过后续select抓取和通过后续subselect抓取之间选择。
11 batch-size (可选, 默认为1) 指定通过延迟加载取得集合实例的批处理块大小("batch size")。
12 access(可选-默认为属性property):Hibernate取得集合属性值时使用的策略
13 乐观锁 (可选 - 默认为 true): 对集合的状态的改变会是否导致其所属的实体的版本增长。 (对一对多关联来说,关闭这个属性常常是有理的)
14 mutable(可变) (可选 - 默认为true): 若值为false,表明集合中的元素不会改变(在某些情况下可以进行一些小的性能优化)。