最近自己做了个小项目(练习),使用Spring+Hibernat+icefaces
然后自己写Daobase,在daoImpl 调用daobase 抛出异常collection with two open sessions 异常,郁闷了很久,在网络上看了很多文章,依然不得解决方法,也行我还是一般水准吧。
无意中在JavaEye 看大家对daobase 的讨论得出可能是我daobase的问题,修改后竟然OK
贴出daobase方法:
在保存实体的时候由于有关联关系,分别调用了下面2个方法
/**保存单个对象
*/
public void saveObject(Object obj){
getHibernateTemplate().save(obj);
}
/**查找对象,参数类名和map 返回List ,map可以是表的任何字段。
*/
public List findObjectSingle(Object obj, Map<String,Object> map){
Iterator it = map.entrySet().iterator();
StringBuffer sql = new StringBuffer();
while(it.hasNext()){
Map.Entry entry = (Map.Entry)it.next();
String key = entry.getKey().toString();
String val = entry.getValue().toString();
sql.append(" and " + key + "='" + val + "'");
}
return (List) getSession().createQuery("from "+obj.toString()+" where 1=1 "+ sql );
}
//后来修改成:
public List findObjectSingle(Object obj, Map<String,Object> map){
Session session = this.getSession();
Iterator it = map.entrySet().iterator();
StringBuffer sql = new StringBuffer();
while(it.hasNext()){
Map.Entry entry = (Map.Entry)it.next();
String key = entry.getKey().toString();
String val = entry.getValue().toString();
sql.append(" and " + key + "='" + val + "'");
}
List list = (List)session.createQuery("from "+obj.toString()+" where 1=1 "+ sql ).list();
session.flush();
session.close();
return list;
}
//或:
public List findObjectSingle(Object obj, Map<String,Object> map){
Iterator it = map.entrySet().iterator();
StringBuffer sql = new StringBuffer();
while(it.hasNext()){
Map.Entry entry = (Map.Entry)it.next();
String key = entry.getKey().toString();
String val = entry.getValue().toString();
sql.append(" and " + key + "='" + val + "'");
}
return (List) getHibernateTemplate().find("from " +obj.toString()+" where 1=1 "+ sql);
}
//OK,原因是程序开启了2个Session 所以报错!!!
我的配置类似:
http://www.blogjava.net/Sunday/archive/2007/08/28/140593.html中的第2中方式
参考帖子:
1:
http://www.blogjava.net/Sunday/archive/2007/08/28/140593.html
2:
http://www.iteye.com/post/240511?page=1
3:[url]http://www.iteye.com/topic/15359 [/url]此处我的工程没有设置filter
4:[url]http://www.iteye.com/topic/8224?page=1 [/url]看此贴想出了解决方法。
分享到:
相关推荐
- **OpenSessionInView** 是Hibernate的一个重要概念,它允许在视图层打开一个Session,这样就可以在渲染视图的时候访问数据库。 - **get() 和 set() 方法** 用于对象属性的获取和设置,在文档中被用于封装实体类...
为了保证数据的正确传输和处理,通常需要在`web.xml`中注册一些常用的过滤器,如字符集过滤器(解决乱码问题)和OpenSessionInView过滤器。OpenSessionInView过滤器在Web请求的整个生命周期内保持一个Hibernate ...
- **与其他框架的良好集成**:Struts2很容易与Spring、Hibernate等框架集成,形成完整的开发解决方案。 #### 二、Hibernate框架 **Hibernate** 是一个开放源代码的ORM(Object Relational Mapping)框架,用于简化...
在Java Web开发中,Struts、Spring和Hibernate是最常见的三大框架,它们各自承担着不同的职责。以下将分别介绍这些框架的核心概念以及在面试中可能涉及的知识点。 1. Struts作为MVC框架,负责控制层的处理。MVC模式...
2.通过spring注入dao到 action 3.通过 open session in view filter 支持 延迟加载 4.在页面上通过 jstl 很优雅的获取数据 5.通过 spring aop(aspectJ) 声明事务 6.通过formular 映射参数表,指定两个死的变量
标题和描述指向的是一个关于Struts、Spring和Hibernate技术栈的面试题集合,这份文档旨在帮助准备面试的软件工程师理解并复习这些关键技术点。以下是基于给定内容的关键知识点的详细阐述: ### 1. Action的线程安全...
### Struts + Spring + Hibernate 面试题解析 #### 1. AOP 和 IOC 的概念以及在 Spring 中的应用 **AOP(Aspect Oriented Programming,面向切面编程)**: 是一种编程思想,它允许程序员定义“切面”来封装那些...
### Spring + Hibernate OpenSessionInView 模式的理解和应用 在Java Web开发中,Spring与Hibernate作为两个重要的框架,经常被一起使用来实现业务逻辑与数据持久化的处理。而在使用这两个框架时,为了更好地管理...
Struts、Spring和Hibernate是Java Web开发中常用的三大框架,它们分别负责不同的职责。Struts是一个经典的MVC(Model-View-Controller)框架,Spring则是提供了一个全面的企业级应用开发框架,包括依赖注入(DI)、...
在整合JSF、Spring和Hibernate时,通常会使用Spring的OpenSessionInView模式来处理数据库会话。这能确保在HTTP请求的整个生命周期内保持有效的Hibernate Session,从而避免可能出现的数据访问问题。 至于压缩包中的...
**OpenSessionInView模式**是一种常用的Hibernate优化模式,其主要目的是解决Hibernate的一级缓存问题。通过这种方式,可以确保在一个HTTP请求的生命周期内,Hibernate的Session始终处于打开状态,从而避免了因...
6. **整合 Spring 和 Hibernate**:配置数据源,创建 SessionFactory,通过 Spring 的 HibernateTemplate 或者 SessionFactory 的 OpenSessionInView 模式进行数据访问。 7. **测试与调试**:确保所有组件能够正常...
根据提供的文件信息,我们可以推断出这是一篇关于整合Struts2、Hibernate和Spring框架的文章。下面将基于这些信息详细阐述这些技术的关键知识点。 ### Struts2+Hibernate+Spring框架整合 #### 一、概述 Struts2、...
Struts、Hibernate和Spring(SSH)是Java Web开发中经典的三大框架,它们分别负责MVC模式中的模型(Model)、视图(View)和控制器(Controller)部分。在面试中,了解这些框架的核心概念和实际应用是非常重要的。 ...
OpenSessionInView模式是一种解决数据持久层和Web层之间事务管理的策略。在用户请求到达时开启一个数据库Session,在请求处理完后关闭Session。这样,整个请求生命周期内,数据库操作都可以在一个Session内完成,...
### Spring管理Struts与Hibernate详解 #### 一、Spring整合Struts 在Web开发中,Struts是一个基于MVC设计模式的开源框架,它能够帮助开发者构建可维护性高、结构清晰的应用系统。Spring框架则提供了强大的依赖注入...
SSH框架,全称为Struts + Spring + Hibernate,是一种经典的Java web开发框架组合。这个框架集合了Struts的MVC模式、Spring的依赖注入和事务管理以及Hibernate的对象关系映射能力,为开发者提供了一个高效、稳定且...
《韩顺平Spring雇员管理系统中的Hibernate ORM框架详解》 在现代软件开发中,数据库管理和对象关系映射(ORM)框架扮演着至关重要的角色。韩顺平老师的"Spring雇员管理系统"教学资源,重点关注了使用Hibernate ORM...
总结起来,这个多数据库解决方案利用Spring的IoC容器管理和配置了多个数据源,同时结合Hibernate提供了ORM功能。通过`OpenSessionInView`模式,确保了Web请求中的持久化操作能在合适的Session上下文中进行。这样的...