一、使用组成关系的原则
  在不导致数据冗余的前提下,尽可能减少数据库表的数目及表之间的外键参照关系,因为建立多个表的连接是很耗时的操作。
  举例说明:Customer类中的Address属性,可以通过组件的方式来映射,避免了额外建立一张ADDRESS表,还能达到对象化操作的目的。
  配置文件:

<component name="homeAddress" class="mypack.Address">
  <parent name="customer" />
  <property name="province" type="string" column="HOME_PROVINCE"/>
  <property name="city" type="string" column="HOME_CITY"/>
  <property name="street" type="string" column="HOME_STREET"/>
  <property name="zipcode" type="string" column="HOME_ZIPCODE"/>
</component>

  说明:

name:设定被映射的持久化类的属性名。
class:设定homeAddress属性的类型。
<parent>:指定Address类所属的整体类。

  注意:区分是否存在组成关系。Hibernate组件Address没有OID。
  1、区分 值类型和实体类型
    Hibernate组件Address没有OID,因此不能通过Session来单独保存、更新、删除或加载一个Address对象。当使用以下方法时:

session.load(Address.class,new Long(1));
session.save(address);
session.update(address);
session.delete(address);

  会抛出org.hibernate.MappingException:Unknow entity class: xx.xxx.Address。
  值类型没有OID,不能被单独持久化,它的生命周期依赖于所属的持久化类的对象的生命周期。
二、映射复合组成关系
  一个Hibernate组件可以包含其他的Hibernate组件,获取其他实体类关联。
  配置文件同上,仅是在component中嵌套一个component即可。
三、Hibernate组件总结:以Address为例
  1、没有OID,在数据库中没有对应的表。
  2、不需要单独创建Address类的映射文件。
  3、不能单独持久化Address对象。Address对象的生命周期依赖于其整体类对象的生命周期。
  4、其他持久化类不允许关联Address类。
  5、Address类可以关联其他持久化类。
  6、在component元素中还可以嵌套component元素,用于映射复合组成关系。

声明:该文所有内容均来自《精通Hibernate:Java对象持久化技术详解》[孙卫琴 电子工业出版社] 一书。该文的目的仅仅作为学习笔记。若需要转载,请注明原书相关信息。

最新文章

  1. 正则匹配抓取input 隐藏输入项和 &lt;td&gt;标签内的内容
  2. apache日志轮询技术
  3. LeetCode#227.Basic Calculator II
  4. 敏捷软件开发:原则、模式与实践——第10章 LSP:Liskov替换原则
  5. (七)C语言中的void 和void 指针类型
  6. 【CG】CG标准函数库——数学函数
  7. HDU5400 Arithmetic Sequence
  8. 虚拟机中Ubuntu设置固定IP方法
  9. 深入理解Javascript闭包概念
  10. python基础--异常,对象和迭代器
  11. Lucene 的索引文件锁原理
  12. 陌陌架构分享 – Apple Push Notification Service
  13. SQL优化总结之一
  14. GoldenGate OGG-01032 There Is a Problem in Network Communication Error in Writing to Rmt Remote Trail Rmttrail (Doc ID 1446621.1)
  15. XML使用与总结
  16. npm和node的版本过低时的解决办法
  17. mybatis中批量更新的问题
  18. python之tkinter使用-消息弹框
  19. Hadoop常用命令总结
  20. kali linux中文输入法

热门文章

  1. HEOI 2016 游记
  2. mkdir:批量创建文件夹
  3. How to mount a NFS share?
  4. Oracle11g +Win 64+PLSQL9.0
  5. 用dygraphs图表分析xdebug的trace结果
  6. ACM/ICPC 之 SPFA练习两道(ZOJ3088-ZOJ3103)
  7. 调试WebService
  8. springMVC中ajax的使用
  9. Mathematics:Ultra-QuickSort(POJ 2299)
  10. codeforces 492C. Vanya and Exams 解题报告