[转载]http://callan.iteye.com/blog/124561
关于hibernate2和hibernate3中clob字段延迟加载
关键字: hibernate
在hibernate3中提供了属性延迟加载的功能,只要设置属性的的lazy="true",以后通过getXXX才能真正从数据库中读取数据.
以下是hibernate2的实现:
public class UserInfo implements serializable{
private String userName;
......
}
public class UserPer extends UserInfo implements Serializable{
private Clob desc;
......
}
UserPer .hbm.xml
< hibernate-mapping >
< class name="UserPer " polymorphism="explicit" >
/>
通过polymorphism="explicit"声明了一个显式的多态关系(默认的隐式多态模式polymorphism="implicit").只有在from UserPer 时,才能返回此类的实例.
这样通过fom UserInfo时就不会返回UserPer
[转载]http://tenn.iteye.com/blog/103230
(二),面向性能的粒度细分
---针对业务逻辑,通过合理的细粒度对象,提高系统的能耗比(性能/资源消耗)。
实体类TUser
public class TUser implements Serializable{
private Integer id;
private String name;
private Integer age;
private Blob image;
private Clob resume;
...getter/setter...
}
“重量级”字段类型,应该在确实需要显示的时候再读取。---Hibernate3提供了属性的延迟加载功能,通过这个功能,我们可以在调用TUser.getResume/getImage时才真正从数据库中读取数据。Hibernate2在继承层次上的粒度划分--将TUser对象拆分为TUserInfo和TUserProfile。
public class TUserInfo implements Serializable{
private Integer id;
private String name;
private Integer age;
...getter/setter...
}
public class TUserProfile extends TUserInfo implements Serializable{
private Blob image;
private Clob resume;
...getter/setter...
}
通过继承关系,将一个对象进行纵向细分。---对于无需操作大对象而言就通过TUserInfo对数据进行加载,对于需要处理大对象就通过TUserProfile进行处理。
TUserInfo.hbm.xml
<hibernate-mapping>
<class name="TUserInfo" table="T_User">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native">
</generator>
</id>
<property name="name" column="name" type="java.lang.String">
<property name="age" column="age" type="java.lang.Integer">
</class>
</hibernate-mapping>
TUserProfile.hbm.xml
<hibernate-mapping>
<class name="TUserProfile" table="T_User" ploymorphism="explicit">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native">
</generator>
</id>
<property name="name" column="name" type="java.lang.String"/>
<property name="age" column="age" type="java.lang.Integer"/>
<property name="image" column="image" type="java.sql.Blob"/>
<property name="resume" column="resume" type="java.sql.Clob"/>
</class>
</hibernate-mapping>
通过polymorphism="explicit"声明了一个显示多态关系。声明为显示多态的类,只有在明确指定类名的时候才会返回此类实例。如:
List objects = createQuery("from TUserProfile").list();
总结:实体粒度设计主要细化手段:1,将一个表映射为多个类,各实体类彼此独立,一个主类,其余类为主类的属性,在映射文件上表现为主类的组件(Component),组件从属于主类;2,采用继承纵向细分,细分的类具有继承关系,实体类映射文件各自独立,子类映射文件声明polymorphism="explicit"。
关于hibernate2和hibernate3中clob字段延迟加载
关键字: hibernate
在hibernate3中提供了属性延迟加载的功能,只要设置属性的的lazy="true",以后通过getXXX才能真正从数据库中读取数据.
以下是hibernate2的实现:
public class UserInfo implements serializable{
private String userName;
......
}
public class UserPer extends UserInfo implements Serializable{
private Clob desc;
......
}
UserPer .hbm.xml
< hibernate-mapping >
< class name="UserPer " polymorphism="explicit" >
/>
通过polymorphism="explicit"声明了一个显式的多态关系(默认的隐式多态模式polymorphism="implicit").只有在from UserPer 时,才能返回此类的实例.
这样通过fom UserInfo时就不会返回UserPer
[转载]http://tenn.iteye.com/blog/103230
(二),面向性能的粒度细分
---针对业务逻辑,通过合理的细粒度对象,提高系统的能耗比(性能/资源消耗)。
实体类TUser
public class TUser implements Serializable{
private Integer id;
private String name;
private Integer age;
private Blob image;
private Clob resume;
...getter/setter...
}
“重量级”字段类型,应该在确实需要显示的时候再读取。---Hibernate3提供了属性的延迟加载功能,通过这个功能,我们可以在调用TUser.getResume/getImage时才真正从数据库中读取数据。Hibernate2在继承层次上的粒度划分--将TUser对象拆分为TUserInfo和TUserProfile。
public class TUserInfo implements Serializable{
private Integer id;
private String name;
private Integer age;
...getter/setter...
}
public class TUserProfile extends TUserInfo implements Serializable{
private Blob image;
private Clob resume;
...getter/setter...
}
通过继承关系,将一个对象进行纵向细分。---对于无需操作大对象而言就通过TUserInfo对数据进行加载,对于需要处理大对象就通过TUserProfile进行处理。
TUserInfo.hbm.xml
<hibernate-mapping>
<class name="TUserInfo" table="T_User">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native">
</generator>
</id>
<property name="name" column="name" type="java.lang.String">
<property name="age" column="age" type="java.lang.Integer">
</class>
</hibernate-mapping>
TUserProfile.hbm.xml
<hibernate-mapping>
<class name="TUserProfile" table="T_User" ploymorphism="explicit">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native">
</generator>
</id>
<property name="name" column="name" type="java.lang.String"/>
<property name="age" column="age" type="java.lang.Integer"/>
<property name="image" column="image" type="java.sql.Blob"/>
<property name="resume" column="resume" type="java.sql.Clob"/>
</class>
</hibernate-mapping>
通过polymorphism="explicit"声明了一个显示多态关系。声明为显示多态的类,只有在明确指定类名的时候才会返回此类实例。如:
List objects = createQuery("from TUserProfile").list();
总结:实体粒度设计主要细化手段:1,将一个表映射为多个类,各实体类彼此独立,一个主类,其余类为主类的属性,在映射文件上表现为主类的组件(Component),组件从属于主类;2,采用继承纵向细分,细分的类具有继承关系,实体类映射文件各自独立,子类映射文件声明polymorphism="explicit"。