如果延迟加载出现session close的情况下可以在web.xml中配置spring的openSessionInViewFilter
<filter> <filter-name>hibernateFilter</filter-name> <filter-class> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter </filter-class> </filter> <filter-mapping> <filter-name>hibernateFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping>
这样就可以解决了;
或者可以这样:
tx = session.beginTransaction(); Customer customer=(Customer)session.load(Customer.class,new Long(1)); if(!Hibernate.isInitialized(customer)) Hibernate.initialize(customer); tx.commit(); session.close(); customer.getName();
在业务逻辑层中使用延迟加载
即使在视图外面,Spring框架也通过使用AOP 拦截器 HibernateInterceptor来使得延迟加载变得很容易实现。这个Hibernate 拦截器透明地将调用配置在Spring应用程序上下文中的业务对象中方法的请求拦截下来,在调用方法之前打开一个Hibernate会话,然后在方法执行完之后将会话关闭。让我们来看一个简单的例子,假设我们有一个接口
BussinessObject: public interface BusinessObject { public void doSomethingThatInvolvesDaos(); } 类BusinessObjectImpl实现了BusinessObject接口: public class BusinessObjectImpl implements BusinessObject { public void doSomethingThatInvolvesDaos() { // lots of logic that calls // DAO classes Which access // data objects lazily } }
通过在Spring应用程序上下文中的一些配置,我们可以让将调用BusinessObject的方法拦截下来,再令它的方法支持延迟加载。看看下面的一个程序片段:
<beans> <bean id="hibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean> <bean id="businessObjectTarget" class="com.acompany.BusinessObjectImpl"> <property name="someDAO"><ref bean="someDAO"/></property> </bean> <bean id="businessObject" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="target"><ref bean="businessObjectTarget"/></property> <property name="proxyInterfaces"> <value>com.acompany.BusinessObject</value> </property> <property name="interceptorNames"> <list> <value>hibernateInterceptor</value> </list> </property> </bean> </beans>
当businessObject被调用的时候,HibernateInterceptor打开一个Hibernate会话,并将调用请求传递给 BusinessObjectImpl对象。当BusinessObjectImpl执行完成后,HibernateInterceptor透明地关闭了会话。应用层的代码不用了解任何持久层逻辑,还是实现了延迟加载。
相关推荐
完成操作后,务必调用Session的close()方法关闭Session,释放数据库连接,防止资源泄露。 3. **事务管理**:在Session中进行的数据库操作通常需要包裹在Transaction中。我们可以使用Session的beginTransaction()...
`load()`在延迟加载机制中更为常用。 4. `query()`: 通过HQL(Hibernate Query Language)或Criteria API执行查询操作,HQL是面向对象的查询语言,类似于SQL,但更加面向Java对象。 下面是一个简单的使用示例: ``...
在Hibernate框架中,Session是与数据库交互的主要接口,它提供了多种方法来操作对象的状态和数据。本文主要讨论了`get`、`load`方法以及`flush`、`clear`、`evict`等方法的区别。 首先,让我们关注`get`和`load`的...
`load`方法采用延迟加载机制,只有在真正使用对象时才会执行SQL,而`get`方法则立即执行查询。`flush()`、`clear()`和`close()`方法分别用于清理缓存并执行SQL(但不提交)、清空缓存和回滚事务,以及清空缓存并提交...
在IT行业中,SSH(Spring、Struts、Hibernate)是一个经典的Java Web开发框架组合,而这里的"ssh 分页代码(延迟加载)"指的是在SSH框架下实现分页查询时采用的延迟加载技术。延迟加载是一种优化策略,它允许我们在...
Hibernate支持懒加载,允许延迟加载关联的对象,以提高性能。`@OneToMany`, `@ManyToOne`, `@OneToOne`等注解可以定义关联关系,`fetch=FetchType.LAZY`启用懒加载。级联操作(`cascade=CascadeType.ALL`)使得对父...
Hibernate采用懒加载策略,延迟加载关联对象,直到真正使用时才加载。这通过代理机制实现,例如,当访问一个设置了懒加载的一对多关系时,实际加载的是代理对象,只有在调用其属性时才会触发数据库查询。 七、事务...
- 支持延迟加载(Lazy Loading):只在真正需要时才加载关联的对象,减少数据库交互次数。 3. 使用Hibernate的jar包: - 将下载的hibernate压缩包解压,会得到多个jar文件,包括hibernate-core、hibernate-...
另外,Hibernate的 Criteria API 还可以配合DetachedCriteria使用,实现延迟加载(Lazy Loading),这对于处理大数据量时的性能优化至关重要。延迟加载允许我们在需要时才加载关联的对象,避免一次性加载大量数据...
Hibernate的延迟加载机制是指在查询数据时,数据并不会立即加载到内存中,而是等到应用程序真正需要操作数据时才加载,这一机制有效减少了服务器内存的使用,提升了服务器性能。 ### Hibernate中实现类间关系的方法...
为了提高性能,Hibernate提供了一些策略和工具,如缓存机制、延迟加载、批量操作等。二级缓存可以缓存已查询过的对象,减少对数据库的访问;懒加载可以在需要时才加载关联的对象,避免一次性加载大量数据;批处理...
10. **延迟加载(Lazy Loading)**: Hibernate 的懒加载机制可以在需要时才加载关联对象,提高性能。 通过以上关键点,我们可以理解Hibernate的核心运作机制,从而高效地进行数据库操作。在实际开发中,还需要...
**Eclipse Hibernate基本配置及简单实现** 在Java开发中,Hibernate是一个非常流行的持久化框架,它简化了数据库...在实际项目中,还可以进一步学习和应用Hibernate的高级特性,如缓存、延迟加载等,以提升应用性能。
- **懒加载**:延迟加载关联对象,只在真正需要时才从数据库加载。 - **读取策略**:选择合适的读取策略(如 Immediate 或 Lazy),以优化数据加载过程。 #### 八、高级特性 ##### 8.1 多租户支持 Hibernate 支持...
7. **实体生命周期**:Hibernate 提供了预加载、加载、持久化、更新、删除、脱管等状态以及相应的回调方法。 通过这个基础教程,你可以了解 Hibernate 框架的基本用法,但要成为 Hibernate 高手,还需要深入学习其...
- **懒加载**:延迟加载策略可以在需要时才加载关联对象,提高性能。 - **级联操作**:可以设置级联关系,使得对父对象的操作自动影响到子对象。 - **投影与分页**:使用HQL或Criteria API实现复杂查询,包括投影...
10. **性能优化**:包括延迟加载、批处理更新、连接池配置等,都是提升Hibernate应用性能的关键。 综上,"hibernate Maven仓库资源"主要涵盖了如何在Maven项目中配置和使用Hibernate,以及Hibernate的基本操作和...
Hibernate还支持 Criteria 查询、HQL(Hibernate Query Language)、事务管理、级联操作、延迟加载等高级特性,这些都是提高开发效率的重要工具。 通过以上步骤,你就可以在Java应用中使用Hibernate连接Oracle...
9. 性能优化:最后,笔记会探讨一些Hibernate的性能优化技巧,如批处理、缓存策略、延迟加载的合理使用等,以提高应用程序的运行效率。 总之,《韩顺平.2011版.hibernate笔记》全面地介绍了Hibernate的各个方面,...