您的位置:jsp学习站首页 >> 框架/开源 >> Hibernate >> Hibernate中any元素的应用体会

Hibernate中any元素的应用体会 (1)

[ 来源:互网络 | 更新日期:2007-09-26 23:13:06 | 浏览次数:4584]
简介:1
Hibernate中any元素的应用体会
  
  关联(Associations)是Hibernate核心概念之一,比较常用的有:
  
  many-to-one, one-to-one, one-to-many, many-to-many
  
  Hibernate还提供了另外一种关联――异类关联(Heterogeneous Associations)
  
  在Hibernate Reference (cn) 2.1.6中是这样说明的:
  
  引用:
  
  6.10. 异类关联(Heterogeneous Associations)
  
  <many-to-any>和<index-many-to-any>元素提供真正的异类关联。这些元素和<any>元素工作方式是同样的,他们都应该很少用到。
  
  下面针对<any>元素,谈一些自己的体会。
  
  一、什么时候需要<any>元素
  
  持久类中“一个属性”关联“另外一个指定的持久类”(几乎每个应用都有这种情况),多半会使用many-to-one, one-to-one这样的关联。映射到关系数据库中,也多半使用外键约束。
  
  可能会遇到有这么一种特殊的情况,需要:持久类中“一个属性”关联“另外一些持久类”。
  
  举个例子:Log类中使用logEntity属性关联一组业务持久类。(也就是说,在Log中记录不同业务类的实例对象)
  
  如果使用many-to-one,则有很大的限制。首先,需要这些业务类都要继承一个超类,而且在数据库中必须有这个超类对应的表。在Hibernate提供的三种继承映射策略中,只能使用前两种:
  
  1、“每棵类继承树使用一个表(table per class hierarchy) ”
  
  2、“每个子类一个表(table per subclass)”
  
  第1种通常不大合适:所有的业务类映射为一张表,冗余过多,限制也多,增加一个业务类就需要修改表结构,不易扩展。
  
  第2种的情况是:表的数量=业务表数量 + 一个超类表,子类表通过主键和超类表关联(所以实际上关系模型是一对一关联)。业务表数量比较多的时候,这种结构的性能和灵活性都有问题。
  
  这时<any>元素就派上用场啦。
  
  二、<any>元素的应用
  
  1、类:
  
  业务类:
  java代码:
  
  public class BizOne {
  private Long    id;
  private String    bizOneDescription;
  //Getters and Setters 省略
  }
  public class BizTwo {
  private Long    id;
  private String    bizTwoDescription;
  private Date  createDate;
  //Getters and Setters 省略
  }
  
  日志类:
  java代码:
  
  public class MyLog {
  private Long    id;
  private Date    logDate;
  private Object    logEntity;    //这就是<any>元素对应的属性。
  //Getters and Setter 省略
  }
  
  2、hbm.xml 和 表结构:
  
  这里只给出MyLog的hbm.xml(BizOne, BizTwo很简单,不提了):
  
  java代码:
  
  <hibernate-mapping>
  <class name="com.test.entity.MyLog" table="MyLog">
  <id name="id" column="id">
  <generator class="native"/>
  </id>
  <property name="logDate"/>
  <any name="logEntity" meta-type="string" id-type="long">
  <meta-value value="One" class="com.test.entity.BizOne"/>
  <meta-value value
[1] [2] [3]
Tags:关键字:Hibernate中any元素的应用体会
责任编辑:glen