最近自己做了个小项目(练习),使用Spring+Hibernat+icefaces
然后自己写Daobase,在daoImpl 调用daobase 抛出异常collection with two open sessions 异常,郁闷了很久,在网络上看了很多文章,依然不得解决方法,也行我还是一般水准吧。
无意中在JavaEye 看大家对daobase 的讨论得出可能是我daobase的问题,修改后竟然OK
贴出daobase方法:
在保存实体的时候由于有关联关系,分别调用了下面2个方法
我的配置类似:[url]http://www.blogjava.net/Sunday/archive/2007/08/28/140593.html[/url]中的第2中方式
参考帖子:
1:[url]http://www.blogjava.net/Sunday/archive/2007/08/28/140593.html[/url]
2:[url]http://www.iteye.com/post/240511?page=1[/url]
3:[url]http://www.iteye.com/topic/15359 [/url]此处我的工程没有设置filter
4:[url]http://www.iteye.com/topic/8224?page=1 [/url]看此贴想出了解决方法。
然后自己写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 所以报错!!!
我的配置类似:[url]http://www.blogjava.net/Sunday/archive/2007/08/28/140593.html[/url]中的第2中方式
参考帖子:
1:[url]http://www.blogjava.net/Sunday/archive/2007/08/28/140593.html[/url]
2:[url]http://www.iteye.com/post/240511?page=1[/url]
3:[url]http://www.iteye.com/topic/15359 [/url]此处我的工程没有设置filter
4:[url]http://www.iteye.com/topic/8224?page=1 [/url]看此贴想出了解决方法。