[转载]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"。
分享到:
相关推荐
在这个"06_传智播客JPA详解_大数据字段映射与字段延迟加载"的自学视频中,我们将会深入探讨两个关键概念:大数据字段的映射和字段的延迟加载。 首先,让我们来理解大数据字段映射。在数据库中,有些字段可能包含...
2. **延迟加载**(Lazy Loading):在Hibernate中,大字段可以通过懒加载策略来优化,只在真正需要时才从数据库读取,避免了不必要的网络传输和内存占用。 3. **文件存储**:对于非常大的字段,如大文本或多媒体...
然而,对于大字段,我们可能希望延迟加载,直到真正需要时才从数据库获取。为此,可以使用`@Basic(fetch = FetchType.LAZY)`注解或在XML映射中设置`fetch="lazy"`。 2. 立即加载:如果经常需要访问大字段,可以选择...
- **数据加载**:`get()`和`load()`方法用于从数据库中获取对象,`load()`通常用于延迟加载(lazy loading)。 - **事务处理**:Hibernate使用Transaction对象来管理事务,通过Transaction的begin、commit、...
关于Hibernate的`get()`和`load()`方法,两者都能通过ID查询对象,但`get()`会立即从数据库加载数据,而`load()`则采用延迟加载机制,只有在访问对象属性时才会触发实际的数据库查询。 在MyEclipse中,我们可以方便...
- 理解并实现Blob和Clob字段的映射。 - 掌握乐观锁定的不同实现方式。 **实验步骤:** - 复合主键实验中,学习如何定义和使用复合主键。 - Blob/Clob实验中,学习如何映射这些特殊类型的字段。 - 乐观锁定实验中,...
可设置`fetch`属性为`LAZY`,实现延迟加载。例如: ```java @Basic(fetch = FetchType.LAZY) String getDetailedComment() { ... } ``` 8. `@Temporal`:用于日期和时间类型的映射,可以是`TemporalType.DATE`、`...
3. 懒加载(Lazy Loading):延迟加载非必需的关联对象,减少内存占用。 4. 避免过多的实体关系:过于复杂的关系可能导致性能下降,适当的时候考虑使用DTO(Data Transfer Object)。 五、最佳实践 1. 保持实体类...
8. `@Basic(fetch = FetchType.LAZY)`:`FetchType.LAZY`表示属性的加载是延迟的,只有在实际访问该属性时,Hibernate才会去数据库查询。例如,`getDetailedComment()`方法的返回值。 9. `@Temporal(TemporalType....
- `@OneToMany`和`@ManyToMany`默认是立即加载(EAGER),可以通过`fetch=FetchType.LAZY`设置为懒加载,延迟到实际使用时才加载关联数据。 - `@OneToOne`和`@ManyToOne`默认是懒加载(LAZY),但实际效果取决于所...
FetchType.LAZY可实现延迟加载。例如: ```java @Basic(fetch = FetchType.LAZY) private String detailedComment; ``` 7. **@Temporal**:用于日期和时间类型的映射,有DATE、TIME和TIMESTAMP三种类型。例如: ```...
字段延迟加载是JPA的一个特性,用于提高性能,只在需要时加载相关数据,通过@Lob和基本的懒加载策略实现。 **7. 使用JPA加载_更新_删除对象** JPA提供了加载(find, persist, merge, refresh, detach等方法)、更新...
7. **延迟加载**:理解并正确使用Hibernate的延迟加载机制,可以优化性能,避免不必要的数据获取。 **应用专题** 1. **LOB字段处理**:SSH提供了处理大对象(LOB)字段的方法,如BLOB和CLOB,确保大数据类型的存储...
- `@Basic` 注解用于声明属性的存取策略,如默认的 eager fetch(即时加载)或 lazy fetch(延迟加载)。例如,`@Basic(fetch = FetchType.LAZY)` 表示该属性的获取将在需要时才执行数据库查询。 2. **时间类型与@...
例如,如果希望某个属性在加载实体时延迟加载,则可以使用`FetchType.LAZY`作为参数传递给`@Basic`注解: ```java @Basic(fetch = FetchType.LAZY) public String getDetailedComment() { return null; } // ...
- **Hibernate数据检索策略**:立即加载、延迟加载。 - **对象之间的关联关系** - **一对一**:通过外键或者双向关联的方式实现。 - **一对多、多对一**:通过集合属性来表示多对一的关系。 - **多对多关联**...