Hibernate 映射基础
时间:2010-10-13 来源:菊次郎
建议: 一个class类对应一个映射文件
映射文件分为多个层级元素:
第一层: <hibernate-mapping> 元素中的参数, 参考手册
第二层: <class name="alex.Person" table="T_PERSON" >元素中的参数, 参考手册, 其中一个比较有用的字段是optimistic-lock: Version 检查version /timestamp字段
接下来:
<id name="almClearTypeId" type="java.lang.Long">
<column name="CLEAR_TYPE_ID" precision="2" scale="0" />
<generator class="native" />
</id>
特别讲一下生成策略:
比较有用的是hilo和seqhilo, 以及uuid(强烈推荐, 32位字符串)
<version>元素: 表明表中包含附带的版本信息的数据, 这在长事务特别有用.
<timestamp>元素: 表明表中包含时间戳数据, 用来代替<version>
最后就是:
<property name="name" type="java.lang.String">
<column name="NAME" length="64" not-null="true" />
</property>
多对一:
<many-to-one name="product" class="Product" column="PRODUCT_ID" />
比较重要的属性:
Cascade属性: 把特定的操作传递到关联对象
Fetch: 在外连接抓取 和 序列选择抓取 中选择一个
Lazy false 表示此关联总是被预先抓取.
一对一:
<one-to-one name="person" class="Person"/>
两种: 主键关联, 唯一外键关联
如果两个对象通过主键1对1关联, 必须确认它们被赋予同样的标识id
我们必须保证PERSON和EMPLOYEE表中的相关字段必须是相等的.
<class name="person" table="PERSON">
<id name="id" column="PERSON_ID">
<generator class="foreign">
<param name="property">employee</param>
</generator>
</id>
…
<one-to-one name="employee" class="Employee" />
</class>
<subclass> 多态持久化需要为父类的每一个子类都进行定义. 对于"每一棵类继承树对应一个表"的策略来说, 就需要使用<subclass>
对于每个子类一个表的策略, 被继承的状态通过和超类的表关联得到, 我们使用<joined-subclass>元素
每个具体类一张表的策略(映射继承树中具体类部分到表中), 使用<union-subclass>映射
<key> 在父映射元素定义了对新表的连接.
将java类型系统映射到sql/数据库系统,
对于实体类型: 使用<class> <subclass>
对于值类型: 使用<Property> <component>以及其他.