实体粒度设计:
一、面向设计的粒度细分:主要是以一种组件(Component)的方式实现;组件即从属于某个整体的一个组成部分。Component没有标识,它作为一个逻辑组成,完全从属于实体对象。在hibernate的hbm.xml配置文件中中可以通过component节点结组件时行声明。如下图所示:
以达到细分TUser中的两个逻辑组成部分
二、面向性能的粒度细分:针对业务逻辑,通过合理的细粒度对象,提高系统的能耗比;在此最好的一个例子就是数据库中存大字段clob、blob字段带来的性能问题。解决这道可以利用hibernate3中提供了属性延迟加载功能在调用取数据时才真正从数据库中读取数据。至于hibernate2中则可以采用继承上的粒度划分来解决.如下例子:将原来的TUser对象拆分为TUserInfo和TUserProfile.
public class TUserInfo implements Serializable{
private Integer id;
private String name;
private Integer age;
......getter/setter.....
}
public class Tu TUserInfo implements Serializable{
private Blob image;
private Clob resume;
...getter/setter....
}
这样一来,我们对于无需操作resume/image数据的应用逻辑而言,我们可以通过TUserInfo对数据进行加载,而对于需要处理resume/image类型的,可以通过TUserProfile进行处理.
对于TUserInfo.hbm.xml配置文件要写三个属性即可,而对于继承它的TUserProfile实例类配置文件TUserProfile.hbm.xml则要写父类的三个属性和本身的两个属性,总共五个属性,最重要的是在这个配置文件中必须加上一个声明为显式多态关系。声明为显式多态的类:
<hibernate-mapping>
<class name="***.TUserProfile" table="T_USER"
polymorphism="explicit">
.....