Hibernate 映射文件 结构
<!DOCTYPE hibernate-mapping PUBLIC?
? "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
? "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
??
<hibernate-mapping package="com.test.hibernate">
? <class name="News" table="news_table">
? ? <id name="id">
? ? ? <generator not-null="true" type="string"/>
? ? <property name="content" type="string"/>
? ? <!--property ?name="fullContent"?
? ? ? ? ? ? ? formula="(select concat(nt.title,nt.content) from news_table nt where nt.id=id)"></property -->
? ? <property ? name="fullContent"?
? ? ? ? ? ? ? ? column="full_content" type="string"?
? ? ? ? ? ? ? ? generated="insert"></property>
? </class>
</hibernate-mapping>
?
1. 主要元素配置
? ? hibernate-mapping 有各种属性(P389),class也有各种属性(P390).
? ??
? ? class里面也可以配置hibernate-mapping表示覆盖配置.
? ??
? ? hibernate-mapping里面可以包含多个class,但是一般一个文件只配置一个class(表).
? ??
? ? class里面id配置标识属性,其他使用property配置.
? ??
? ? id和property都有各种 属性值可配置(P392)
?
2. id的生成器配置
? ? <id name="id">
? ? ? <generator unique="false">
? ? ? <parent name="owner" />
? ? ? <property name="first" />
? ? ? <property name="last" />
? ? ? <!-- 组件的字段为集合(Map) -->
? ? ? <map name="power" table="name_power">
? ? ? ? <key ?column="person_id" not-null="true" />
? ? ? ? <map-key column="name_aspect" type="string" />
? ? ? ? <element column="name_power" type="int" />?
? ? ? </map>
? ? </component>
? ??
7. 映射集合,该集合的 元素 为 组件,元素数据来自集合的表,组件字段是集合表中的.
? ?普通map中一个key对应一个字段,而使用组件作为元素,则一个key可以对应多个字段.
?
? <!-- 集合的元素 为 组件 -->
? ? <map name="nicks" table="nick_inf">
? ? ? <key column="person_id" not-null="true" />
? ? ? <map-key column="phase" type="string" />
? ? ? <!-- 集合的元素 为 组件 -->
? ? ? <!-- 为简化管理,Hibernate不再允许composite-element 里面再包含list,map,set等集合元素 -->
? ? ? <composite-element />
? ? ? ? <property name="first" />
? ? ? ? <property name="last" />?
? ? ? </composite-element>
? ? </map>
? ?
8. ?映射集合,该集合的 key 为 组件, ?使用 composite-map-key
? ? 组件字段是集合表中的.
?
? ?<!-- 集合的key为组件, -->
? ? <map name="nickPower" table="nick_power">
? ? ? <key column="person_id" not-null="true" />
? ? ? <!-- 因为使用组件作为key,这里必须用这个composite-map-key标签 -->
? ? ? <composite-map-key type="string" />
? ? ? ? <key-property name="last" type="string" />
? ? ? </composite-map-key>
? ? ? <element column="nick_power" type="int" /> ? ?
? ? </map>
? ??
9. 组件作为复合主键
??
? ?此时,组件必须满足:
? ?(1) 实现 java.io.serializable接口
? ?(2) 需要正确重写equals()和hashCode()方法
? ?
? ?一个映射配置中,id和composite-id只能出现一次(因为一个表只能有一个主键)
? ?
? ?<!-- 组件作为复合主键 -->
? ? <composite-id name="myCompostieKey" type="int" />?
? ? ? <key-property name="key2" type="string" />?
? ? </composite-id >