Получить счет из запроса
Я использую mysql 5.5 с openjpa 2.3.0.
У меня есть сущности с namedQueries (сгенерированные в NetBeans - я хотел бы иметь возможность использовать это), например:
@NamedQuery(name = "User.findAll", query = "SELECT u FROM User u")
@NamedQuery(name = "User.findByGender", query = "SELECT u FROM User u WHERE u.gender = :gender")
Я создаю перезаполненное приложение с постраничными результатами. Я хотел бы вернуться за каждый постраничный результат Content-Range
заголовок как 1-20/250
где 20 - размер страницы, общее количество 250
Я пытался создать запрос
entityManager.createNativeQuery("SELECT count(1) FROM (" + namedQuery.toString() + ") as foo;");
где я мог бы динамически вставить любой именованный запрос и вернуть счетчик, не возвращая список результатов -> это должно быть быстрее.
Когда я выполняю это, возникает исключение
SQL state 42S22: Unknown column 'u' in 'field list'
Выполнение самого запроса в entitymanager в порядке. Могу ли я использовать менеджер сущностей или построитель критериев, чтобы создать запрос для подсчета результатов, не возвращая список результатов (и не записывая для каждого namedQuery дубликат подсчета)? Спасибо за помощь.
1 ответ
Вы смешиваете JPQL с нативными запросами. JPQL говорит SELECT u ОТ сущности u, SQL будет SELECT * FROM сущностью u или SELECT col1,col2,col3 ОТ сущности u
Вы могли бы написать именованный запрос JPQL, считая материал, например, SELECT COUNT(u) FROM entity u. Затем getSingleResult() возвращает Object[], первый элемент которого содержит счетчик.
Не хорошо, но работает. Почему вы все равно должны запросить номер? Пагинация означает следующее = lastindex+ размер страницы. если следующий