我有以下MySQL声明:
"SELECT * FROM $this->tableName WHERE news_publication_id = '" + newsPublicationId + "' AND list_order > '" + listOrder +"' ORDER BY list_order LIMIT 1"
我首先做了一个Hibernate DAO层,开始了数据处理路径。
它有以下基于标准的方法:
@Override
public NewsHeading findNextWithListOrder(NewsPublication newsPublication, int listOrder) {
Criteria criteria = getSession().createCriteria(getPersistentClass());
criteria.add(Restrictions.eq("newsPublication", newsPublication));
criteria.add(Restrictions.gt("listOrder", listOrder)).addOrder(Order.asc("listOrder")).setMaxResults(1);
return (NewsHeading) criteria.uniqueResult();
}
它运作得很好。
然后我尝试了一个JPA2存储库层。
现在有以下基于JPQL的方法:
@Query("SELECT nh FROM NewsHeading nh WHERE nh.newsPublication = :newsPublication AND nh.listOrder > :listOrder ORDER BY nh.listOrder ASC LIMIT 1")
public NewsHeading findByNextListOrder(@Param("newsPublication") NewsPublication newsPublication, @Param("listOrder") int listOrder);
但它不起作用。因为LIMIT子句无效。
所以我想知道该怎么做。
我仍然可以在此JPA2存储库层中使用上述基于标准的方法吗?
我想避免相信客户端传递限制值,而更喜欢将该值(1)硬编码到我的图层中。
此外,该语句只返回一个对象,因此不需要分页。
任何提示都会受到欢迎。
亲切的问候,
Stephane Eybert
答案 0 :(得分:1)
你可以使用PageRequest
。 http://docs.spring.io/spring-data/jpa/docs/1.6.2.RELEASE/reference/html/repositories.html#repositories.core-concepts
Hibernate希望您在setMaxResults()
对象上执行Query
,但JPA不会直接与之对话。
其他选项是使用@NamedNativeQuery