在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中,这是绝对可能的,但它似乎已经消失了。
当前回答
如果不想使用setMaxResults,也可以使用Query。滚动而不是列表,并获取您想要的行。例如,对于分页很有用。
其他回答
我的观察是,即使你在HQL (hibernate 3.x)中有限制,它也会导致解析错误或被忽略。(如果你在limit前有order by + desc/asc,它将被忽略,如果你在limit前没有desc/asc,它将导致解析错误)
@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);
如果不想使用setMaxResults,也可以使用Query。滚动而不是列表,并获取您想要的行。例如,对于分页很有用。
你需要写一个本地查询,参考这个。
@Query(value =
"SELECT * FROM user_metric UM WHERE UM.user_id = :userId AND UM.metric_id = :metricId LIMIT :limit", nativeQuery = true)
List<UserMetricValue> findTopNByUserIdAndMetricId(
@Param("userId") String userId, @Param("metricId") Long metricId,
@Param("limit") int limit);
你可以使用下面的查询
NativeQuery<Object[]> query = session.createNativeQuery("select * from employee limit ?");
query.setparameter(1,1);