HibernateTemplate 在Spring2.5以前 有两个 execute 方法:
1.execute(HibernateCallback)
2.execute(HibernateCallback action, boolean enforceNativeSession)
区别如下:
spring的HibernateTemplate的execute方法提供的回调接口具有Session作为参数,但是实际上,默认情况下,HibernateTemplate传递给回调接口的session并不是org.hibernate.impl.SessionImpl类,而是SessionImpl类的一个Proxy类。之所以替换成为一个Proxy类,HibernateTemplate的注释说明,Proxy提供了一些额外的功能,包括自动设置Cachable,Transaction的超时时间,Session资源的更积极的关闭等等。
java代码:
private boolean exposeNativeSession = false;
…
execute方法内部:
Session sessionToExpose = (exposeNativeSession ? session : createSessionProxy(session));
但是遗憾的是,Hibernate的DetachedCriteria的setExecutableCriteria方法却要求将session参数强制转为SessionImpl,但是spring传过来的却是一个Proxy类,因此就报错了。
java代码:
public Criteria getExecutableCriteria(Session session) {
impl.setSession( (SessionImpl) session ); // 要求SessionImpl,Spring传递的是Proxy
return impl;
}
解决方法,禁止Spring的HibernateTemplate传递Proxy类,强制要求它传递真实的SessionImpl类,即给exexute方法增加一个参数,提供参数为true,如下:
java代码:
public List findByCriteria(final DetachedCriteria detachedCriteria) {
return (List) getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Criteria criteria = detachedCriteria.getExecutableCriteria(session);
return criteria.list();
}
}, true);
}
在Spring2.5以后的HibernateTemplate中,第二个execute方法已经Deprecated了,被 executeWithNativeSession 方法取代
转自:http://blog.csdn.net/rocdream/archive/2010/02/06/5293439.aspx
分享到:
相关推荐
《精通Spring2.5》是一本深度探讨Spring框架的权威指南,主要针对Spring 2.5版本进行深入解析。Spring是Java企业级应用开发中最受欢迎的框架之一,它以其轻量级、模块化的设计,以及对IoC(Inversion of Control,...
Spring 2.5 是 Spring 框架的一个重要版本,它在 2008 年发布,引入了许多新特性和改进,提升了框架的灵活性和性能。在这个版本中,Spring 框架进一步完善了其核心特性,如依赖注入、AOP(面向切面编程)以及对 Java...
Spring2.5和Hibernate3集成 采用声明式事务 1.声明式事务的配置 * 配置sessionFactory * 配置事务管理器 * 配置事务的传播特性 * 配置哪些类哪些方法使用事务 2.编写业务逻辑方法 * 继承...
【Spring 2.5 教程(传智)】是一个针对初学者的全面Spring框架教程,旨在帮助开发者理解和掌握Spring的核心特性和使用方法。以下是该教程涵盖的主要知识点: 1. **Spring 概述**:Spring是一个开源的Java平台,它...
Struts2、Spring2.5和Hibernate3.2是Java Web开发中经典的三大框架,它们的整合使用在过去的许多年里被广泛应用于企业级应用系统。这个完整的项目提供了从开发环境到运行环境的所有必要组件,包括数据库脚本,使得...
Spring 2.5在AOP方面也有显著提升。AOP允许开发者定义“切面”,这些切面封装了横切关注点,如日志记录、事务管理等。Spring 2.5引入了基于注解的AOP,使用`@Aspect`定义切面,`@Before`、`@After`、`@Around`等注解...
**Spring2.5** 是一个全面的、开源的应用程序框架,尤其擅长于管理对象之间的依赖关系,采用IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)理念。Spring2.5增强了对JSR-...
Spring 2.5是Spring框架的一个重要版本,它在2008年发布,引入了许多增强功能和改进,为开发者提供了更加灵活和强大的工具。在这个版本中,Spring框架的组件和API进行了优化,以适应不断变化的Java生态系统。以下是...
在事务管理方面,Spring2.5提供了声明式事务管理,通过`@Transactional`注解可以轻松地在方法级别指定事务属性。这极大地降低了事务管理的复杂性,让开发者能够专注于业务逻辑。 Spring2.5还加强了与Web应用程序的...
9. **Spring Expression Language (SpEL)**:Spring 2.5引入了SpEL,这是一种强大的表达式语言,用于在运行时查询和操作对象图,它在AOP、Bean装配等方面都有广泛的应用。 10. **测试支持**:Spring 2.5提供了全面...
Spring 2.5 和 Hibernate 是两个非常重要的Java企业级开发框架,它们在现代Web应用程序的开发中扮演着核心角色。Spring 提供了一个全面的编程和配置模型,旨在简化Java应用程序的开发,而Hibernate则是一个强大的...
总的来说,Spring 2.5.jar在SSH2集成中起到了粘合剂的作用,它通过提供依赖注入、AOP和事务管理等核心功能,使得Struts2和Hibernate可以更好地协同工作,提高了开发效率和软件质量。在实际项目中,开发者应当充分...
标题 "jersey+spring2.5+hibernate3.3+jpa" 指的是一种集成技术,将轻量级的RESTful服务框架Jersey、企业级应用框架Spring 2.5、持久层框架Hibernate 3.3以及Java Persistence API(JPA)结合在一起,以实现高效且...
《Spring Framework 2.5 开发参考手册》是Spring框架的重要文档,主要涵盖了Spring 2.5版本的核心特性和使用方法。Spring是一个开源的应用程序框架,它为Java平台提供了全面的基础设施支持,使得开发者能够更方便地...
3. **Field 注入**:通过使用注解的方式直接在字段上进行注入,这种方式在 Spring 2.5 中已经得到了支持。 以上就是关于 Spring2.5 学习笔记的主要知识点,通过这些内容的学习,可以更好地理解和掌握 Spring 框架的...
Spring框架是Java应用程序开发中的一个核心组件,尤其在企业级应用中广泛使用。Spring2.5版本虽然相对较老,但其基本概念和设计原则对于理解后续版本甚至Spring Boot等现代框架至关重要。本手册将深入探讨Spring的...
这篇博客“Spring之Spring2.5集成Hibernate3.6”主要探讨了如何将两个经典的开源框架——Spring 2.5和Hibernate 3.6进行整合,以实现数据持久化的高效管理。 Spring 2.5版本是Spring框架的一个重要里程碑,它引入了...
Struts2、Hibernate3.3和Spring2.5是Java Web开发中三个非常重要的框架,它们的整合在企业级应用中十分常见。Struts2作为MVC(模型-视图-控制器)架构的实现,主要负责处理用户请求并展现响应;Hibernate3.3是一个...
在传智播客的Spring 2.5版本教程中,我们将会深入探讨这个版本所包含的关键特性。 1. **依赖注入(Dependency Injection, DI)** - 依赖注入是Spring的核心特性之一,它允许开发者将对象的创建和管理职责从代码中...