我的项目里没有spring,然后在baseHibernateDAO中比如一个获取对象的代码:
public Object getObjectByID(Class clazz,Integer id){
try{
getSession();
Object obj = session.get(clazz, id);
return obj;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
如果我在catch后加上finally{closeSession();}那么就不能执行many to one这样的级联查询,那如果不关闭行吗,
getSession()是从threadLocal中得到的session对象。

解决方案 »

  1.   

    补关闭应该可以的,Hibernate的Session可以自动关闭
      

  2.   

    应该可以自动关闭。
    --
    但是我不明白咋跟级联有关系。你的级联没有设置lazy=false?
      

  3.   

    如果不用手动关闭可以的话,那HibernateSessionFactory中的closeSession()就没用了
      

  4.   

    最好手动关闭,不过hibernate可以自动帮你关闭
      

  5.   

    直接用hibernateTemplate不就完事了?
      

  6.   

    纠正几点:
    1.hibernate的session如果没有交给spring管理,是无法自动关闭的,必须手动关闭。
    2.session关闭和<many-to-one>是没有关系的,只有在load的时候会报session关闭的错误,这个可以通知一下配置更改的。
      

  7.   

    我建议你必须要关闭session。因为如果你不关闭那么每发起一个指令就会触动一个线程,这样的话线程就会无止境的增加,如果不close的话就得等到它的timeout,但timeout如果设置时间太长的话就会跟没有设置一样,如果设置时间太短就会导致你在操作过程中session丢失导致还得重新登陆。
    我建议你把session关闭,至于你说的那种级联查询我建议你修改代码规范,因为我认为你的代码规范存在很大的问题。