Hibernate如何保存组件属性?
对于组件中基本数据类型及其包装类型、String、Date类型的属性,Hibernate会把每个属性映射成一个数据列。
对于组件中数组、集合类型的属性,Hibernate会把每一个集合属性映射成一张单独的从表,并通过外键与主表相关联。
Hibernate使用<component/>元素映射组件属性
<component name="name" class="org.lgy.hibernate.pojos.Name" access="" insert="true" update="true" lazy="false" optimistic-lock="true" unique="false"> </component>
name:组件属性的名称
class:组件类的类名
access:该组件属性的访问策略,field或property
insert:被映射的字段是否出现在SQL的insert语句中
update:被映射的字段是否出现在SQL的update语句中
lazy:是否启用延迟加载
optimistic-lock:更新该组件属性时是否需要获取乐观锁,如果设置为true,则当修改该组件属性时,持久化对象的版本号会增加
unique:是否在该组件映射的所有字段上添加唯一性约束
1、映射组件中基本数据类型及其包装类型、String类型、Date类型的属性
Hibernate使用<property/>元素映射此类型的属性,具体使用请参见《Hibernate映射文件之映射普通属性》
<component name="name" class="org.lgy.hibernate.pojos.Name"> <property name="firstName" type="string" column="first_name" length="100"/> <property name="lastName" type="string" column="last_name" length="100"/> </component>
2、映射组件中数组、集合类型的属性
映射组件类中的集合属性与映射持久化类的集合属性完全相同,请参见《Hibernate映射文件之映射集合属性》
<component name="name" class="org.lgy.hibernate.pojos.Name"> <list name="formerNames" table="former_name"> <key column="person_id" not-null="true"/> <list-index column="list_index"/> <element column="name" type="string" length="100"/> </list> </component>
3、映射组件中组件类型的属性
对于这种类型的属性,依然使用<component/>元素进行映射,也就是说,在<component/>元素中再次使用<component/>元素进行映射。
具体如何使用<component/>元素,请参阅本文。
<component name="name" class="org.lgy.hibernate.pojos.Name"> <component name="netName" class="org.lgy.hibernate.pojos.NetworkName"> <property name="firstNetName" type="string" column="first_net_name" length="100"/> <property name="lastNetName" type="string" column="last_net_name" length="100"/> </component> </component>