`
xiaofengtoo
  • 浏览: 485321 次
  • 性别: Icon_minigender_1
  • 来自: xiamen
社区版块
存档分类
最新评论

Spring+Hibernat openSessionInView 解决

阅读更多
最近自己做了个小项目(练习),使用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]看此贴想出了解决方法。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics