因为某些原因,今天把表的主键类型改成了String类型的了,所有导致下面的类似的方法就用不了了,所已我想问问该怎么解决啊,这是我DAO层的方法,还是不是因为String的问题?   我底层的方法:(简单的分页查询.....)
       public <T extends BascEntity> List<T> getByPage(final String HQL,
final int pageNo, final int pageSize) {
try {
List<T> list = hibernateTemplate
.executeFind(new HibernateCallback() {
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
final Query query = session.createQuery(HQL);
return (query.setFirstResult(pageNo).setMaxResults(
pageSize).list());
}
});
return list;
} catch (Exception e) {
log.error("对象分页查询失败", e);
return null;
}
}     测试方法:
       public static void setUpBeforeClass() throws Exception {
ApplicationContext ctx = new FileSystemXmlApplicationContext(
new String[] {
"WebRoot/WEB-INF/springconfig/applicationContext.xml",
"WebRoot/WEB-INF/springconfig/spring-dao.xml",
"WebRoot/WEB-INF/springconfig/spring-service.xml" });
dao = (EmployeeDAOImpl) ctx.getBean("employeeDAO");
} @Test
public void testGetAllEmp() {
try {
List<Employee> empList = dao.getByPage("from Employee e", 1, 3); for (Employee emp : empList) {
System.out.println(emp.getEmpName() + " "
+ emp.getDepInfo().getDepName()); }
} catch (Exception e) {
e.printStackTrace();
}
}用junit测试报错:      java.lang.NullPointerException
at com.act.dao.service.test.EmployeServiceImplTest.testGetAllEmp(EmployeServiceImplTest.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66)
at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
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.   

    获得的dao为null
    dao = (EmployeeDAOImpl) ctx.getBean("employeeDAO"); 
    这里的dao没定义吗?
      

  2.   

    dao = (EmployeeDAOImpl) ctx.getBean("employeeDAO"); 改成
    dao = (EmployeeDAO) ctx.getBean("employeeDAO"); 试下
      

  3.   

    java.lang.NullPointerException 
    看看2楼问的
      

  4.   

    类型肯定改了啊,现在报的错误我都无从下手,不知道是什么原因,导致我之前写的很多方法都运行不了了,查出的list集合都是空的,在改类型之前都是没问题的,这是为什么啊,我的DAO层的方法:
    public <T extends BascEntity> List<T> getByPage(final String HQL,
    final int pageNo, final int pageSize) {
    try {
    List<T> list = hibernateTemplate
    .executeFind(new HibernateCallback() {
    @Override
    public Object doInHibernate(Session session)
    throws HibernateException, SQLException {
    final Query query = session.createQuery(HQL);
    return (query.setFirstResult(pageNo).setMaxResults(
    pageSize).list());
    }
    });
    return list;
    } catch (Exception e) {
    log.error("对象分页查询失败", e);
    return null;
    }
    }service层调用的方法:
    public List<EmployeeVO> getAllEmp(int pageNo, int pageSize) {
    List<Employee> empList = employeeDAO.getByPage("from Employee", pageNo,
    pageSize);
    List<EmployeeVO> empVOList = new ArrayList<EmployeeVO>();
    for (Employee emp : empList) {
    EmployeeVO empVO = new EmployeeVO();
    empVO.setEmpId(emp.getEmpId());
    empVO.setEmpName(emp.getEmpName());
    empVO.setEmpLoc(emp.getEmpLoc());
    empVO.setDepCode(emp.getDepInfo().getDepCode());
    empVO.setDepName(emp.getDepInfo().getDepName());
    empVO.setAcctiveFlag(emp.getActiveFlag());
    empVOList.add(empVO);
    }
    return empVOList;
    }
    类映射文件:
    <hibernate-mapping>
        <class name="com.act.dao.pojo.Employee" table="employee">
            <id name="empId" type="java.lang.String">
                <column name="emp_id" length="10" />
                <generator class="assigned" />
            </id>
            <many-to-one name="depInfo" class="com.act.dao.pojo.DepInfo" fetch="select" lazy="false">
                <column name="dep_code" length="10" />
            </many-to-one>
            <property name="empName" type="java.lang.String">
                <column name="emp_name" length="20" />
            </property>
            <property name="empLoc" type="java.lang.String">
                <column name="emp_loc" length="50" />
            </property>
            <property name="activeFlag" type="java.lang.Byte">
                <column name="active_flag" not-null="true" />
            </property>
        </class>
    </hibernate-mapping>
    这样的配置没有错啊 ,难道hibernate底层的方法不支持主键查询是String的?
      

  5.   

        方法可以查出来结果,可以肯定是分页有错了。
    public <T extends BascEntity> List <T> getByPage(final String HQL, 
    final int pageNo, final int pageSize) { 
    try { 
    List <T> list = hibernateTemplate 
    .executeFind(new HibernateCallback() { 
    @Override 
    public Object doInHibernate(Session session) 
    throws HibernateException, SQLException { 
    final Query query = session.createQuery(HQL); 
    System.out.println("分页查询的记录:" + query.list());
    return (query.setFirstResult(pageNo).setMaxResults( 
    pageSize).list()); 

    }); 
    return list; 
    } catch (Exception e) { 
    log.error("对象分页查询失败", e); 
    return null; 

    }     System.out.println("分页查询的记录:" + query.list());
    打印出来是有值的    这是为什么啊,之前都可以,难道是数据库的问题,我现在用的是sqlserver,sqlserver不支持这种分页?