hibernate + spring得到范围内的最大id

时间:2013-07-08 08:56:41

标签: sql spring hibernate java-ee hsqldb

如何使用hibernate + spring获取具有max id的对象。我只需要正确的查询。这就是我的尝试。

Student s = new Student();

DetachedCriteria maxId = DetachedCriteria maxId = DetachedCriteria.forClass(Student.class)
            .setProjection(Projections.max("id"));

s = (Student) sessionFactory.getCurrentSession()
        .createCriteria(Student.class)
        .add(Restrictions.between("id", 30000, 40000))
        .add(Property.forName("id").eq(maxId)).uniqueResult();
System.out.println(s.getId());
return s;

我还需要结果范围,其重要条件。例如,我希望学生的ID范围从30000到40000.我怎样才能实现这一目标?

我也玩这段代码

s = (Student) sessionFactory.getCurrentSession()
          .createCriteria(Student.class).add(Restrictions.between("id", 30000,
          40000)).uniqueResult();

只是提到结果不应该是一个应该是唯一结果的列表。

2 个答案:

答案 0 :(得分:1)

这样的事情怎么样?

   List<Student> results = sessionFactory.getCurrentSession()
                           .createCriteria(Student.class)
                           .setProjection(Projections.max("id"))
                           .add(Restrictions.between("id", 30000, 40000)).list();

   if (results != null && results.size() > 0) {
       s = results.get(0);
   }
   else {
       // not found
   }

答案 1 :(得分:0)

这是解决方案,我自己设法解决了这个问题:

int maxId = (Integer) sessionFactory.getCurrentSession()
                .createCriteria(Student.class)
                .add(Restrictions.between("id", 30000, 40000))
                .setProjection(Projections.max("id")).uniqueResult();
        s.setId(maxId);