最近自己做了个小项目(练习),使用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]看此贴想出了解决方法。
分享到:
相关推荐
介绍Spring+hibernate opensessioninview问题
2.通过spring注入dao到 action 3.通过 open session in view filter 支持 延迟加载 4.在页面上通过 jstl 很优雅的获取数据 5.通过 spring aop(aspectJ) 声明事务 6.通过formular 映射参数表,指定两个死的变量
最新版SSH项目整合 实现了OpenSessionInView。 hibernate5.2.3+struts2.5.2+spring4.3.3
spring2.5学习PPT 传智博客 01_全面阐释Spring及其各项功能 ... 30.Spring提供的CharacterEncoding和OpenSessionInView功能 31.使用Spring集成JPA 32.Struts+Spring+JPA集成 33.使用Spring集成Struts2 34.所有源码
SSH项目整合示例【OpenSessionInView】所用到的jar包 包含Struts + Hibernate + Spring所有jar及其依赖的jar
Spring提供的CharacterEncoding和OpenSessionInView功能
NULL 博文链接:https://8366.iteye.com/blog/472141
在没有使用Spring提供的Open Session In View情况下,因需要在service(or Dao)层里把session关闭,所以lazy loading 为true的话,要在应用层内把关系集合都初始化,如 company.getEmployees(),否则Hibernate抛...
OpenSessionInView项目整合jar包
和Spring中OpenSessionInView由于org.springframework.web.struts.ContextLoaderPlugIn中保存同一个对象的名不同导致openSessionInView失效 稍微修改后在struts-config.xml中使用MyContextLoaderPlugIn.jar包中...
NULL 博文链接:https://likenice.iteye.com/blog/290162
3,在web.xml中配置 spring 的 OpenSessionInView 过滤器(解决抛LazyInitializationException的问题) 1,配置 <!-- 配置 spring 的 OpenSessionInView 过滤器 --> <filter-name>OpenSessionInView ...
Spring的Ioc Spring的AOP , AspectJ Spring的事务管理 , 三大框架的整合 目录 1.1 Spring 框架学习路线:..........................................................................................................
NULL 博文链接:https://yanzhenwei.iteye.com/blog/1701164
SSH项目整合示例【OpenSessionInView】源码
使用 AOC 拦截器而不是过滤器进行 OpenSessionInView 处理 列出一个国家的城市和添加城市的可能性(bean 验证和自动检索 lat 和 lng 坐标) 安全 安全的 REST Web 服务 使用 CSRF 令牌 角度父状态的问题 有用的链接 ...