QueryDSL谓词(数据JPA)将按一些规则查询所有记录并将它们分组?

时间:2015-06-10 21:22:47

标签: jpa spring-data-jpa querydsl

如果我的数据库中有产品表,并且我想查询20种最昂贵的产品。

SELECT p FROM Products p ORDER BY p.price DESC LIMIT 20

如何将其转换为QueryDSL Predicate或甚至可能?我已经阅读了很多教程和其他内容,我看到过这样的事情:

QProducts p = QProducts.product;
JPAQuery query = new JPAQuery(entityManager);
     query.from(p).orderBy(p.price.price.asc().limit(20));

我没有在我的程序中使用JPA EntityManager,所以我不知道该怎么做。到目前为止,我只完成了这样的查询,并且它们在没有任何EntityManager的情况下工作正常。

public static Predicate productName(String searchTerm){
     QProduct product = QProduct.product;
     return product.name.startsWithIgnoreCase(searchTerm);
}

我只是将Predicate传递给Spring DATA JPA提供的方法。我怎么能像上一个谓词一样解决上面描述的问题?

1 个答案:

答案 0 :(得分:0)

不,orderBy和limit子句不能成为Predicate的一部分。

但是当你使用Spring Data JPA时,你应该在Spring上下文中有一个EntityManager。 尝试将其连接到您的自定义存储库,如下所示:

@PersistenceContext
protected EntityManager em;