Junit测试的错误为:
java.lang.NullPointerException
at org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSession(HibernateDaoSupport.java:140)
at org.hxwl.tm.DAOImpl.AdDAOImpl.save(AdDAOImpl.java:43)
at org.hxwl.tm.test.TestAdDAOImpl.testSave(TestAdDAOImpl.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

解决方案 »

  1.   

    @Override 
    public void save(Ad ad) throws Exception { 
    System.out.println(ad.getDate()); 
    super.getSession().save(ad); 
    }super改成this
      

  2.   

    尽管是从父类继承过来
    不过依然应该用this
    毕竟是这个对象在使用
    另外你检查一下有没有在applicationContext.xml里给这个BEAN配置模板的参照
      

  3.   

    你说的哪个我试过了,不的行.
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    还有个问题是 我就TEACHER表和AD表的所有配置都是一样的,
    但TEACHER相关的方法是可以用的,一点错误没有,而关于AD的相关方法就不行!!
    package org.hxwl.tm.DAOImpl;import java.util.List;import org.hibernate.Query;
    import org.hxwl.tm.IDAO.ITeacherDAO;
    import org.hxwl.tm.vo.Teacher;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class TeacherDAOImpl extends HibernateDaoSupport implements ITeacherDAO { @Override
    public void delete(String name) throws Exception {
    String hsql = "delete from Teacher as t where t.name = ?";
    Query q = super.getSession().createQuery(hsql);
    q.setString(0, name);
    q.executeUpdate();
    } @Override
    public List findAll() throws Exception {
    String hsql = "from Teacher";
    Query q = super.getSession().createQuery(hsql);
    List list = q.list();
    return list;
    } @Override
    public Teacher findByName(String name) throws Exception {
    String hsql = "from Teacher as t where t.name = ?";
    Query q = super.getSession().createQuery(hsql);
    q.setString(0, name);
    Teacher teacher = (Teacher)q.list().get(0);
    return teacher;
    } @Override
    public void save(Teacher teacher) throws Exception {
    System.out.println("测试insert  DAOImpl");
    System.out.println(teacher.getName());
    System.out.println(teacher.getBirth());
    super.getSessionFactory().openSession().save(teacher);
    // super.getSession().save(teacher);
    } @Override
    public boolean isExists(String name) throws Exception {
    String hsql = "from Teacher as t where t.name = ?";
    Query q = super.getSession().createQuery(hsql);
    q.setString(0, name);
    List list = q.list();
    if(list.size()>0)
    return true;
    else
    return false;
    } @Override
    public boolean login(Teacher teacher) throws Exception {
    boolean flag = false;
    String hsql = "from Teacher as t where t.name=? and t.password=?";
    Query q = super.getSession().createQuery(hsql);
    q.setString(0, teacher.getName());
    q.setString(1, teacher.getPassword());
    List all = q.list();
    if (all.size() > 0) {
    flag = true;
    }
    return flag;
    } @Override
    public void update(Teacher teacher) throws Exception {
    super.getSession().update(teacher); }}
      

  4.   

    @Override
    public void save(Teacher teacher) throws Exception {
    System.out.println("测试insert  DAOImpl");
    System.out.println(teacher.getName());
    System.out.println(teacher.getBirth());
    super.getSessionFactory().openSession().save(teacher);
    // super.getSession().save(teacher);
    }super.getSessionFactory().openSession().save(teacher);
    这一句是我在后来做的时候改的,原来是:
    super.getSession().save(teacher);
      

  5.   

    "在调用save(Ad ad)方法时抛出NullPointException异常,在网上查了好多资料,说是没有获取到Session,"你怎么调用的save呢??
    相关代码贴出来。
    还有就是,别资料说是session没取到,你就以为你的也是因为这样啊!
    null.save()或者XXX.save(null)一样会出现NullPointException;
    打印一下session,看是不是真的为NULL再这么问。
    查查到底是哪个变量为NULL,不然白忙!
      

  6.   

    最好把提示的出错信息完整的帖出来看看另外如果你在spring里配置好了模板参照
    那么你应该使用this.getSession()的方法来取得session
      

  7.   

    就是在 super.getSession().save(Ad ad);时报错,
    getSession()是NULL,没办法获取!!!
    但在另外的Teacher的TeacherDAOImpl中,用同样的方法(即:super.getSession())是可以获取Session!!!
      

  8.   


    使用openSession()方法也不行的,还是获取不到!!
      

  9.   


    Spring的applicationContext.xml配置:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
    <bean id="dataSourse"
    class="org.springframework.jndi.JndiObjectFactoryBean"
    destroy-method="close">
    <property name="jndiName" value="java:comp/env/jdbc/tm"></property>
    </bean> <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="dataSourse" />
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.SQLServerDialect
    </prop>
    <!-- 表示允许自动提交 -->
    <prop key="hibernate.connection.autocommit">true</prop>
    <!-- 显示sql语句 -->
    <prop key="hibernate.show_sql">false</prop>
    </props>
    </property>
    <property name="mappingResources">
    <list>
    <value>org/hxwl/tm/vo/Admin.hbm.xml</value>
    <value>org/hxwl/tm/vo/Ad.hbm.xml</value>
    <value>org/hxwl/tm/vo/Teacher.hbm.xml</value>
    <value>org/hxwl/tm/vo/Stipend.hbm.xml</value>
    <value>org/hxwl/tm/vo/ResearchCase.hbm.xml</value>
    <value>org/hxwl/tm/vo/TeachResearchCase.hbm.xml</value>
    <value>org/hxwl/tm/vo/AuditionCase.hbm.xml</value>
    <value>org/hxwl/tm/vo/CheckWork.hbm.xml</value>
    <value>org/hxwl/tm/vo/EduCase.hbm.xml</value>
    <value>org/hxwl/tm/vo/Evection.hbm.xml</value>
    <value>org/hxwl/tm/vo/OperationCase.hbm.xml</value>
    <value>org/hxwl/tm/vo/RewardsAndPunishment.hbm.xml</value>
    <value>org/hxwl/tm/vo/TeacherValueByStudent.hbm.xml</value>
    <value>org/hxwl/tm/vo/TrainCase.hbm.xml</value></list>
    </property>
    </bean> <bean id="hibernateTemplate"
    class="org.springframework.orm.hibernate3.HibernateTemplate"
    abstract="false" lazy-init="default" autowire="default"
    dependency-check="default">
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean>

    <!-- interface -->
    <bean id="iAdminDAO" class="org.hxwl.tm.IDAO.IAdminDAO" abstract="true"></bean>
    <bean id="iAdDAO" class="org.hxwl.tm.IDAO.IAdDAO" abstract="true"></bean>
    <bean id="iTeacherDAO" class="org.hxwl.tm.IDAO.ITeacherDAO" abstract="true"></bean><!-- daoImpl -->
    <bean id="iAdminDAOImpl" class="org.hxwl.tm.DAOImpl.AdminDAOImpl"
    parent="iAdminDAO">
    <property name="hibernateTemplate">
    <ref bean="hibernateTemplate" />
    </property>
    </bean>
    <bean id="iAdDAOImpl" class="org.hxwl.tm.DAOImpl.AdDAOImpl"
    parent="iAdDAO">
    <property name="hibernateTemplate">
    <ref bean="hibernateTemplate" />
    </property>
    </bean>
    <bean id="iTeacherDAOImpl" class="org.hxwl.tm.DAOImpl.TeacherDAOImpl"
    parent="iTeacherDAO">
    <property name="hibernateTemplate">
    <ref bean="hibernateTemplate" />
    </property>
    </bean><!--  struts action  --><!-- others -->
    <bean name="/index" class="org.hxwl.tm.struts.action.IndexAction">
    <property name="adDAOImpl">
    <ref bean="iAdDAOImpl" />
    </property>
    </bean>

    <!-- admin -->
    <bean name="/adminLogin"
    class="org.hxwl.tm.struts.action.AdminAction">
    <property name="admindao">
    <ref bean="iAdminDAOImpl" />
    </property>
    </bean>
    <bean name="/jsp/admin/admin"
    class="org.hxwl.tm.struts.action.AdminAction">
    <property name="admindao">
    <ref bean="iAdminDAOImpl" />
    </property>
    </bean>

    <!-- showAd -->
    <bean name="/showAd" class="org.hxwl.tm.struts.action.ShowAdAction">
    <property name="adDAOImpl">
    <ref bean="iAdDAOImpl"/>
    </property>
    </bean>
    <!-- ad -->
    <bean name="/jsp/admin/ad" class="org.hxwl.tm.struts.action.AdAction">
    <property name="adDAOImpl">
    <ref bean="iAdDAOImpl"/>
    </property>
    </bean>
    <bean name="/jsp/admin/listAd_manage" class="org.hxwl.tm.struts.action.ListAd_manageAction">
    <property name="adDAOImpl">
    <ref bean="iAdDAOImpl"/>
    </property>
    </bean>
    <bean name="/jsp/admin/updateAd" class="org.hxwl.tm.struts.action.UpdateAdAction">
    <property name="adDAOImpl">
    <ref bean="iAdDAOImpl"/>
    </property>
    </bean>

    <!-- teacher -->
    <bean name="/jsp/admin/teacher" class="org.hxwl.tm.struts.action.TeacherAction">
    <property name="teacherDAOImpl">
    <ref bean="iTeacherDAOImpl"/>
    </property>
    </bean>

    </beans>
    报错为:java.lang.NullPointerException
        at org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSession(HibernateDaoSupport.java:140)
        at org.hxwl.tm.DAOImpl.AdDAOImpl.save(AdDAOImpl.java:43)另外还有:
    INFO - Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
    INFO - SQLErrorCodes loaded: [DB2, HSQL, MS-SQL, MySQL, Oracle, Informix, PostgreSQL, Sybase]
      

  10.   

    既然继承了HibernateDaoSupport,为什么还有写得那么麻烦,而不直接这么用呢?
    public void save(Ad ad) throws Exception {
    getHibernateTemplate().save(ad);
    }
      

  11.   


    这样也不的行,要报错:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' er from transaction definition
      

  12.   


    这样也不的行,要报错:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' er from transaction definition
      

  13.   


    这样也不的行,要报错:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' er from transaction definition
      

  14.   

    HibernateDaoSupport来整合ssh,getHibernateTemplate()就相当于hibernate中的session,如果你一定要取到session,应该使用spring提供的HibernateCallback来获得session;
    例如:
    一个简单的分页查询:public List findByPage(final String hql, 
     final int offset, final int pageSize){
          List list = 
                getHibernateTemplate().executeFind(new HibernateCallback(){
    public Object doInHibernate(Session arg0) //得到回调中的session
    throws HibernateException, SQLException {
    // TODO Auto-generated method stub
    List result = session.createQuery(hql)
    .setFirstResult(offset)
    .setMaxResults(pageSize)
    .list();
    return result;
    }

    });
         return list;
    }需要复杂的查询时,使用SqlQuery类时,有时需要当前的session:这是一个查年统计的查询:
    public XXXX findByNameAndMonth(String name, Date date)
    throws DataException {
    XXXX year = null;
    String sql ="select * from t_uday_" + (date.getMonth()+1) 
    +"where login_name=? and logout_date=?";
    SQLQuery query = null;
                try {
    query = this.getHibernateTemplate()
    .getSessionFactory()
    .getCurrentSession()  //取到当前Session
    .createSQLQuery(sql);
    query.addEntity(XXXX.class); query.setString(0, name);
    query.setDate(1, date); year = (XXXX) query.uniqueResult();
         } catch (HibernateException e) {

    e.printStackTrace();
    throw new DataException(e.getMessage());
         }
            return year;
    }
    其他简单的操作,使用getHibernateTemplate()已经足够满足了。
      

  15.   

    HibernateDaoSupport来整合ssh,getHibernateTemplate()就相当于hibernate中的session,如果你一定要取到session,应该使用spring提供的HibernateCallback来获得session;
    例如:
    一个简单的分页查询:public List findByPage(final String hql, 
     final int offset, final int pageSize){
          List list = 
                getHibernateTemplate().executeFind(new HibernateCallback(){
    public Object doInHibernate(Session arg0) //得到回调中的session
    throws HibernateException, SQLException {
    // TODO Auto-generated method stub
    List result = session.createQuery(hql)
    .setFirstResult(offset)
    .setMaxResults(pageSize)
    .list();
    return result;
    }

    });
         return list;
    }需要复杂的查询时,使用SqlQuery类时,有时需要当前的session:这是一个查年统计的查询:
    public XXXX findByNameAndMonth(String name, Date date)
    throws DataException {
    XXXX year = null;
    String sql ="select * from t_uday_" + (date.getMonth()+1) 
    +"where login_name=? and logout_date=?";
    SQLQuery query = null;
                try {
    query = this.getHibernateTemplate()
    .getSessionFactory()
    .getCurrentSession()  //取到当前Session
    .createSQLQuery(sql);
    query.addEntity(XXXX.class); query.setString(0, name);
    query.setDate(1, date); year = (XXXX) query.uniqueResult();
         } catch (HibernateException e) {

    e.printStackTrace();
    throw new DataException(e.getMessage());
         }
            return year;
    }
    其他简单的操作,使用getHibernateTemplate()已经足够满足了。
      

  16.   

    HibernateDaoSupport来整合ssh,getHibernateTemplate()就相当于hibernate中的session,如果你一定要取到session,应该使用spring提供的HibernateCallback来获得session;
    例如:
    一个简单的分页查询:public List findByPage(final String hql, 
     final int offset, final int pageSize){
          List list = 
                getHibernateTemplate().executeFind(new HibernateCallback(){
    public Object doInHibernate(Session arg0) //得到回调中的session
    throws HibernateException, SQLException {
    // TODO Auto-generated method stub
    List result = session.createQuery(hql)
    .setFirstResult(offset)
    .setMaxResults(pageSize)
    .list();
    return result;
    }

    });
         return list;
    }需要复杂的查询时,使用SqlQuery类时,有时需要当前的session:这是一个查年统计的查询:
    public XXXX findByNameAndMonth(String name, Date date)
    throws DataException {
    XXXX year = null;
    String sql ="select * from t_uday_" + (date.getMonth()+1) 
    +"where login_name=? and logout_date=?";
    SQLQuery query = null;
                try {
    query = this.getHibernateTemplate()
    .getSessionFactory()
    .getCurrentSession()  //取到当前Session
    .createSQLQuery(sql);
    query.addEntity(XXXX.class); query.setString(0, name);
    query.setDate(1, date); year = (XXXX) query.uniqueResult();
         } catch (HibernateException e) {

    e.printStackTrace();
    throw new DataException(e.getMessage());
         }
            return year;
    }
    其他简单的操作,使用getHibernateTemplate()已经足够满足了。
      

  17.   

    HibernateDaoSupport来整合ssh,getHibernateTemplate()就相当于hibernate中的session,如果你一定要取到session,应该使用spring提供的HibernateCallback来获得session;
    例如:
    一个简单的分页查询:public List findByPage(final String hql, 
     final int offset, final int pageSize){
          List list = 
                getHibernateTemplate().executeFind(new HibernateCallback(){
    public Object doInHibernate(Session arg0) //得到回调中的session
    throws HibernateException, SQLException {
    // TODO Auto-generated method stub
    List result = session.createQuery(hql)
    .setFirstResult(offset)
    .setMaxResults(pageSize)
    .list();
    return result;
    }

    });
         return list;
    }需要复杂的查询时,使用SqlQuery类时,有时需要当前的session:这是一个查年统计的查询:
    public XXXX findByNameAndMonth(String name, Date date)
    throws DataException {
    XXXX year = null;
    String sql ="select * from t_uday_" + (date.getMonth()+1) 
    +"where login_name=? and logout_date=?";
    SQLQuery query = null;
                try {
    query = this.getHibernateTemplate()
    .getSessionFactory()
    .getCurrentSession()  //取到当前Session
    .createSQLQuery(sql);
    query.addEntity(XXXX.class); query.setString(0, name);
    query.setDate(1, date); year = (XXXX) query.uniqueResult();
         } catch (HibernateException e) {

    e.printStackTrace();
    throw new DataException(e.getMessage());
         }
            return year;
    }
    其他简单的操作,使用getHibernateTemplate()已经足够满足了。
      

  18.   

    HibernateDaoSupport来整合ssh,getHibernateTemplate()就相当于hibernate中的session,如果你一定要取到session,应该使用spring提供的HibernateCallback来获得session;
    例如:
    一个简单的分页查询:public List findByPage(final String hql, 
     final int offset, final int pageSize){
          List list = 
                getHibernateTemplate().executeFind(new HibernateCallback(){
    public Object doInHibernate(Session arg0) //得到回调中的session
    throws HibernateException, SQLException {
    // TODO Auto-generated method stub
    List result = session.createQuery(hql)
    .setFirstResult(offset)
    .setMaxResults(pageSize)
    .list();
    return result;
    }

    });
         return list;
    }需要复杂的查询时,使用SqlQuery类时,有时需要当前的session:这是一个查年统计的查询:
    public XXXX findByNameAndMonth(String name, Date date)
    throws DataException {
    XXXX year = null;
    String sql ="select * from t_uday_" + (date.getMonth()+1) 
    +"where login_name=? and logout_date=?";
    SQLQuery query = null;
                try {
    query = this.getHibernateTemplate()
    .getSessionFactory()
    .getCurrentSession()  //取到当前Session
    .createSQLQuery(sql);
    query.addEntity(XXXX.class); query.setString(0, name);
    query.setDate(1, date); year = (XXXX) query.uniqueResult();
         } catch (HibernateException e) {

    e.printStackTrace();
    throw new DataException(e.getMessage());
         }
            return year;
    }
    其他简单的操作,使用getHibernateTemplate()已经足够满足了。
      

  19.   

    HibernateDaoSupport来整合ssh,getHibernateTemplate()就相当于hibernate中的session,如果你一定要取到session,应该使用spring提供的HibernateCallback来获得session;
    例如:
    一个简单的分页查询:public List findByPage(final String hql, 
     final int offset, final int pageSize){
          List list = 
                getHibernateTemplate().executeFind(new HibernateCallback(){
    public Object doInHibernate(Session arg0) //得到回调中的session
    throws HibernateException, SQLException {
    // TODO Auto-generated method stub
    List result = session.createQuery(hql)
    .setFirstResult(offset)
    .setMaxResults(pageSize)
    .list();
    return result;
    }

    });
         return list;
    }需要复杂的查询时,使用SqlQuery类时,有时需要当前的session:这是一个查年统计的查询:
    public XXXX findByNameAndMonth(String name, Date date)
    throws DataException {
    XXXX year = null;
    String sql ="select * from t_uday_" + (date.getMonth()+1) 
    +"where login_name=? and logout_date=?";
    SQLQuery query = null;
                try {
    query = this.getHibernateTemplate()
    .getSessionFactory()
    .getCurrentSession()  //取到当前Session
    .createSQLQuery(sql);
    query.addEntity(XXXX.class); query.setString(0, name);
    query.setDate(1, date); year = (XXXX) query.uniqueResult();
         } catch (HibernateException e) {

    e.printStackTrace();
    throw new DataException(e.getMessage());
         }
            return year;
    }
    其他简单的操作,使用getHibernateTemplate()已经足够满足了。
      

  20.   

    HibernateDaoSupport来整合ssh,getHibernateTemplate()就相当于hibernate中的session,如果你一定要取到session,应该使用spring提供的HibernateCallback来获得session;
    例如:
    一个简单的分页查询:public List findByPage(final String hql, 
     final int offset, final int pageSize){
          List list = 
                getHibernateTemplate().executeFind(new HibernateCallback(){
    public Object doInHibernate(Session arg0) //得到回调中的session
    throws HibernateException, SQLException {
    // TODO Auto-generated method stub
    List result = session.createQuery(hql)
    .setFirstResult(offset)
    .setMaxResults(pageSize)
    .list();
    return result;
    }

    });
         return list;
    }需要复杂的查询时,使用SqlQuery类时,有时需要当前的session:这是一个查年统计的查询:
    public XXXX findByNameAndMonth(String name, Date date)
    throws DataException {
    XXXX year = null;
    String sql ="select * from t_uday_" + (date.getMonth()+1) 
    +"where login_name=? and logout_date=?";
    SQLQuery query = null;
                try {
    query = this.getHibernateTemplate()
    .getSessionFactory()
    .getCurrentSession()  //取到当前Session
    .createSQLQuery(sql);
    query.addEntity(XXXX.class); query.setString(0, name);
    query.setDate(1, date); year = (XXXX) query.uniqueResult();
         } catch (HibernateException e) {

    e.printStackTrace();
    throw new DataException(e.getMessage());
         }
            return year;
    }
    其他简单的操作,使用getHibernateTemplate()已经足够满足了。
      

  21.   

    HibernateDaoSupport来整合ssh,getHibernateTemplate()就相当于hibernate中的session,如果你一定要取到session,应该使用spring提供的HibernateCallback来获得session;
    例如:
    一个简单的分页查询:public List findByPage(final String hql, 
     final int offset, final int pageSize){
          List list = 
                getHibernateTemplate().executeFind(new HibernateCallback(){
    public Object doInHibernate(Session arg0) //得到回调中的session
    throws HibernateException, SQLException {
    // TODO Auto-generated method stub
    List result = session.createQuery(hql)
    .setFirstResult(offset)
    .setMaxResults(pageSize)
    .list();
    return result;
    }

    });
         return list;
    }需要复杂的查询时,使用SqlQuery类时,有时需要当前的session:这是一个查年统计的查询:
    public XXXX findByNameAndMonth(String name, Date date)
    throws DataException {
    XXXX year = null;
    String sql ="select * from t_uday_" + (date.getMonth()+1) 
    +"where login_name=? and logout_date=?";
    SQLQuery query = null;
                try {
    query = this.getHibernateTemplate()
    .getSessionFactory()
    .getCurrentSession()  //取到当前Session
    .createSQLQuery(sql);
    query.addEntity(XXXX.class); query.setString(0, name);
    query.setDate(1, date); year = (XXXX) query.uniqueResult();
         } catch (HibernateException e) {

    e.printStackTrace();
    throw new DataException(e.getMessage());
         }
            return year;
    }
    其他简单的操作,使用getHibernateTemplate()已经足够满足了。
      

  22.   

    <bean id="dataSourse" 
    class="org.springframework.jndi.JndiObjectFactoryBean" 
    destroy-method="close"> 
    <property name="jndiName" value="java:comp/env/jdbc/tm"> </property> 
    </bean> 

    appication中这么写取不到数据源的楼主,如果你是weblogic的话也得需要一个对象模版才行啊建议你junit的时候
    这么写
    <bean id="dataSource"
    class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName">
    <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
    </property>
    <property name="url">
    <value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=bugtrack</value>
    </property>
    <property name="username">
    <value>sa</value>
    </property>
    <property name="password">
    <value>sa</value>
    </property>
    </bean>
      

  23.   

    HibernateDaoSupport来整合ssh,getHibernateTemplate()就相当于hibernate中的session,如果你一定要取到session,应该使用spring提供的HibernateCallback来获得session;
    例如:
    一个简单的分页查询:public List findByPage(final String hql, 
     final int offset, final int pageSize){
          List list = 
                getHibernateTemplate().executeFind(new HibernateCallback(){
    public Object doInHibernate(Session arg0) //得到回调中的session
    throws HibernateException, SQLException {
    // TODO Auto-generated method stub
    List result = session.createQuery(hql)
    .setFirstResult(offset)
    .setMaxResults(pageSize)
    .list();
    return result;
    }

    });
         return list;
    }需要复杂的查询时,使用SqlQuery类时,有时需要当前的session:这是一个查年统计的查询:
    public XXXX findByNameAndMonth(String name, Date date)
    throws DataException {
    XXXX year = null;
    String sql ="select * from t_uday_" + (date.getMonth()+1) 
    +"where login_name=? and logout_date=?";
    SQLQuery query = null;
                try {
    query = this.getHibernateTemplate()
    .getSessionFactory()
    .getCurrentSession()  //取到当前Session
    .createSQLQuery(sql);
    query.addEntity(XXXX.class); query.setString(0, name);
    query.setDate(1, date); year = (XXXX) query.uniqueResult();
         } catch (HibernateException e) {

    e.printStackTrace();
    throw new DataException(e.getMessage());
         }
            return year;
    }
    其他简单的操作,使用getHibernateTemplate()已经足够满足了。
      

  24.   

    我用的是TOMCAT6.0,配置都是好的,在查询、删除等操作中,其他表都是好的,就现在这一个表(Ad表)不的行??!!
      

  25.   


    我试了下这个方法,还是不行,还是去不到Session,
    但使我高兴的是试过这个后,再还原为原来的后,程序又完全正确了,没有一点问题!!!!
    现在可以向数据库里添加数据了,程序的流程也完全正确!!!!
      

  26.   

    怎么解决的,遇到同样的问题Session为空,求楼主说下解决的方法啊