WEB开发网
开发学院软件开发Java 持久化模式,第 2 部分: 提高代码重用和改进性能 阅读

持久化模式,第 2 部分: 提高代码重用和改进性能

 2010-04-02 00:00:00 来源:WEB开发网   
核心提示: 本文包含的示例代码提供了更多可以添加到泛型 DAO 中的功能(参见 下载), 改进数据获取性能在对 Hibernate 应用程序进行性能调优时,持久化模式,第 2 部分: 提高代码重用和改进性能(6),大部分时间花在调整 Hibernate 处理实体关联的方式上,我们希望尽可能减少装入应用程序中

本文包含的示例代码提供了更多可以添加到泛型 DAO 中的功能(参见 下载)。

改进数据获取性能

在对 Hibernate 应用程序进行性能调优时,大部分时间花在调整 Hibernate 处理实体关联的方式上。我们希望尽可能减少装入应用程序中的数据量,同时尽可能减少需要执行的查询数量。Hibernate 提供了两种处理关联的主要方式:惰性抓取(lazy fetching)和即时抓取(eager fetching)。

惰性抓取

惰性抓取可以尽可能减少从数据库查询到的数据量。如果关联被标为惰性的,那么在装载对象时并不通过关联查询所有数据,而是直到实际使用这个关联时才执行查询。例如,Employee 对象有一个与之相关联的 Address 对象。这两个对象之间的关联是惰性的,所以当装载 Employee 对象时,Hibernate 并不自动装载 Address。相反,当装载 Employee 对象时,Hibernate 会创建 Address 的一个代理实例。当首次访问这个代理实例时,代理要求 Hibernate 会话查询 Address 对象,以后的所有调用都直接交给查询到的实例。如果在 Employee 对象的生命周期内没有使用 Address 对象,就不需要执行 Address 查询。这个特性确保 Hibernate 只在需要时装载数据。

在大多数情况下,应该使用惰性抓取作为默认的关联抓取策略。真实的对象模型往往包含大量复杂的对象关联;如果不使用惰性抓取,那么在装载单一对象时,很容易导致将大量数据装载到会话中。启用惰性抓取很简单,但是根据关联类型的不同,有细微的差异。基于集合的关联(OneToMany 和 ManyToMany)在默认情况下设置为惰性的,所以不需要进行配置。单一对象关联(OneToOne 和 ManyToOne)在默认情况下不是惰性的。为了对这些关联使用惰性抓取,需要在关联的注解中指定惰性抓取:

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:持久化 模式 部分

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接