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;
Другие вопросы по тегам