在Spring-struts-hibernate整合开发时,在DAO类中,为什么Session(hibernate)作为成员变量,就算后面不用,也一定报错(我在每个方法中重新写局部变量Session,我只是做个试验,想知道原理),可是,如果是是普通类,就算在DAO类中作为成员变量,只要是只定义,后面不用,不初始化也不报错,请问为什么?

解决方案 »

  1.   

    可是,如果是是普通类,就算在DAO类中作为成员变量这句话是什么意思?你所谓的普通类跟DAO类有什么区别?
      

  2.   

    我说的普通类,是跟hibernate的Session类相比,是代替Session类放在DAO中
      

  3.   

    不清楚要表达什么意思。。session不是由spring来管理吗?
      

  4.   

    你试下,在DAO类中,配置一个普通类作为成员变量,不在SPRING中初始化,不报错,可是,如果随便写个Session代替普通类,不在SPRING中初始化,就会报错
      

  5.   

    是呀,因为你session在没有初始化时候用到了,所以就会出错。
    但是你的dao里面普通类在service里面用一下试试
    不妨楼主写一个连接数据库的类试试
      

  6.   

    DAO中的Session配了不初始化,但是在具体方法中,我没有用到这个Session,我在每个方法中重新定义局部变量Session,结果也报错
      

  7.   

    不明白楼主的意思。。 
    整合hibernate后会有一个HibernateDaoSupport类 
    自定义的dao只要继承该类就可以了
      

  8.   

    楼主给的信息不全,应该把报的错贴出来
    我猜是因为你把session定义在dao类中,然后spring按bean名自动装配了session,结果类型不对报错的lz没给出错信息,上面的只是我的猜想
      

  9.   

    在DAO类中:public class bas_dictDao implements Bas_dictIDao { SessionFactory sf;
    Transaction tx=null;
    Session sess=null;//!!!!!!作为全局变量      //使用时:
           public boolean add(Object item) {
    Bas_dictForm bdf=(Bas_dictForm)item;
    BasDict bd=new BasDict();
    bd.setDictIsEditable(bdf.getDict_is_editable());
    bd.setDictItem(bdf.getDict_item());
    bd.setDictType(bdf.getDict_type());
    bd.setDictValue(bdf.getDict_value());
    boolean i=false;
    try
            {
             sess=sf.openSession();//写上这句久好了
             tx=sess.beginTransaction();
             sess.save(bd);
             tx.commit();
             i=true;
           
            }
            catch(Exception ex)
            {
             if(null!=tx)
             {
             tx.rollback();
             }
             System.out.print("add()方法出错"+ex.getMessage());
             i=false;
            }
            return i;
    }
      

  10.   

    我的设置成全局变量没有报错,,
    但是我初始化 SESSION 是用的
    session = HibernateSessionFactory.getSession()
    你试试看
      

  11.   

    spring和hibernate整合的话要看你是不是用spring控制事物,如果是那就应该用spring封装的sessiontemplate 而不要用session