在Hibernate 3中,是否有一种方法可以在HQL中实现与以下MySQL限制相同的功能?
select * from a_table order by a_table_column desc limit 0, 20;
如果可能的话,我不想使用setMaxResults。在旧版本的Hibernate/HQL中,这是绝对可能的,但它似乎已经消失了。
在Hibernate 3中,是否有一种方法可以在HQL中实现与以下MySQL限制相同的功能?
select * from a_table order by a_table_column desc limit 0, 20;
如果可能的话,我不想使用setMaxResults。在旧版本的Hibernate/HQL中,这是绝对可能的,但它似乎已经消失了。
当前回答
@Query(nativeQuery = true,
value = "select from otp u where u.email =:email order by u.dateTime desc limit 1")
public List<otp> findOtp(@Param("email") String email);
其他回答
如果您不想在Query对象上使用setMaxResults(),那么您总是可以恢复到使用普通SQL。
Criteria criteria=curdSession.createCriteria(DTOCLASS.class).addOrder(Order.desc("feild_name"));
criteria.setMaxResults(3);
List<DTOCLASS> users = (List<DTOCLASS>) criteria.list();
for (DTOCLASS user : users) {
System.out.println(user.getStart());
}
@Query(nativeQuery = true,
value = "select from otp u where u.email =:email order by u.dateTime desc limit 1")
public List<otp> findOtp(@Param("email") String email);
下面的代码段用于使用HQL执行限制查询。
Query query = session.createQuery("....");
query.setFirstResult(startPosition);
query.setMaxResults(maxRows);
您可以在此链接获得演示应用程序。
我的观察是,即使你在HQL (hibernate 3.x)中有限制,它也会导致解析错误或被忽略。(如果你在limit前有order by + desc/asc,它将被忽略,如果你在limit前没有desc/asc,它将导致解析错误)