用hql语句,如何查询一个表中主键最大的记录?
最好能举个例子说明,将这个方法的完整的写出来。
谢谢

解决方案 »

  1.   


    Query q=hibernateSession.createQuery("select a.name,a.age from Table a order by a.id desc");
      

  2.   

    public Roles findMaxRoleId() {
    HibernateTemplate template = this.getHibernateTemplate();
    return  (Roles) template.executeFind(new HibernateCallback(){
    public Object doInHibernate(Session arg0)
    throws HibernateException, SQLException {
    Query query = arg0.createQuery("from Roles r order by r.id desc");
    return query.list().get(0);  
    }
    });
    }
    帮我看看上面的方法哪里写错了,谢谢
      

  3.   

    return query.list().get(0); 
    在这里直接 .get(0)可能会出现空指针错误。
    其他的没什么问题。
    你什么异常呢?
      

  4.   

    我用junit测试时:
    public void testFindNewRoleId(){
    Roles role = dao.findNewRoleId();
    System.out.println(role.getId());
    }
    报以下异常:org.springframework.dao.InvalidDataAccessApiUsageException: Result object returned from HibernateCallback isn't a List: [com.tianlw.oss.rights.pojo.Roles@e3570c]
    at org.springframework.orm.hibernate3.HibernateTemplate.executeFind(HibernateTemplate.java:344)
    at com.tianlw.oss.rights.dao.RolesDAOImpl.findNewRoleId(RolesDAOImpl.java:58)
    at com.tianlw.oss.test.rights.RolesDAOTest.testFindNewRoleId(RolesDAOTest.java:65)
    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 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)是什么原因啊?
      

  5.   


    后面加上maxResult方法 
      

  6.   

    org.springframework.dao.InvalidDataAccessApiUsageException: Result object returned from HibernateCallback isn't a List: [com.tianlw.oss.rights.pojo.Roles@e3570c] 
     那就对了。你不要.get(0)
    该方法要求返回一个list
    如果你get(0)就是一个实体。不符合方法的返回值要求。
    去掉.get(0)即可。
      

  7.   

    呵呵……飞过了,mysql 的
      

  8.   

    id  int primary key auto_incrementList list = session.createQuery("from 实体名 as o order by o.id").list();
    int maxId = ((实体类型)list.get(list.size()-1)).getId();
      

  9.   

    SELECT e FROM Entity e WHERE e.id = (SELECT max(t.id) FROM Entity t);