5.1.13. 组件(component), 动态组件(dynamic-component)

<component>元素把子对象的一些元素与父类对应的表的一些字段映射起来。 然后组件可以定义它们自己的属性、组件或者集合。参见后面的“Components”一章。

<component
        name="propertyName"
        class="className"
        insert="true|false"
        update="true|false"
        access="field|property|ClassName"
        lazy="true|false"
        optimistic-lock="true|false"
        unique="true|false"
        node="element-name|."
>

        <property ...../>
        <many-to-one .... />
        ........
</component>
1 name: 属性名
2 class (可选 - 默认为通过反射得到的属性类型):组件(子)类的名字。
3 insert: 被映射的字段是否出现在SQL的INSERT语句中?
4 update: 被映射的字段是否出现在SQL的UPDATE语句中?
5 access (可选 - 默认是 property): Hibernate用来访问属性的策略。
6 lazy (可选 - 默认是 false): 表明此组件应在实例变量第一次被访问的时候延迟加载(需要编译时字节码装置器)
7 optimistic-lock (可选 - 默认是 true):表明更新此组件是否需要获取乐观锁。换句话说,当这个属性变脏时,是否增加版本号(Version)
8 unique (可选 - 默认是 false):表明组件映射的所有字段上都有唯一性约束

&lt;property&gt;子标签为子类的一些属性与表字段之间建立映射。

&lt;component&gt;元素允许加入一个&lt;parent&gt;子元素,在组件类内部就可以有一个指向其容器的实体的反向引用。

&lt;dynamic-component&gt;元素允许把一个Map映射为组件,其属性名对应map的键值。 参见第 8.5 节 “动态组件 (Dynamic components)”.