QueryDSL Predicate (Data JPA), который будет запрашивать все записи по какому-то правилу и группировать их?
Если у меня есть таблица продуктов в моей базе данных, и я хочу запросить 20 самых дорогих продуктов.
SELECT p FROM Products p ORDER BY p.price DESC LIMIT 20
Как я могу перевести это в предикат QueryDSL или это вообще возможно? Я прочитал много уроков и других вещей, и я видел такую вещь:
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);
}
Я просто передаю этот предикат методу, предоставленному Spring DATA JPA. Как я мог решить мою проблему, описанную выше, со стилем, как мой предыдущий предикат?
1 ответ
Нет, предложения orderBy и limit не могут быть частью предиката.
Но поскольку вы используете Spring Data JPA, у вас должен быть EntityManager в контексте Spring. Попробуйте подключить его в свой пользовательский репозиторий следующим образом:
@PersistenceContext
protected EntityManager em;