Что-то совсем запутался с этим JPA(( Есть запрос
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Movie> movieCriteria = entityManager.getCriteriaBuilder().createQuery(Movie.class);
Root<Movie> movieRoot = movieCriteria.from(Movie.class);
movieCriteria.select(movieRoot);
movieCriteria.distinct(true);
Join<Movie, Country> countriesJoin = movieRoot.join(Movie_.country);
Join<Movie, Genre> genresJoin = movieRoot.join(Movie_.genre);
movieCriteria.where(cb.equal(genresJoin.get(Genre_.id), genreId), cb.equal(countriesJoin.get(Country_.id), countryId));
movieCriteria.orderBy(cb.asc(movieRoot.get(sort)));
Как можно грамотно получить размер результата?
Пытался добавить в конце
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<Movie> mw = cq.from(movieCriteria.getResultType());
cq.select(cb.count(mw));
return entityManager.createQuery(cq).getSingleResult();
Но возвращается вся таблица(
Насколько я понял Вы хотите получить количество строк по условию?
Можно внести исправления в первый запрос:
//заменяем тип
CriteriaQuery<Long> movieCriteria = cb.createQuery(Long.class);
...
//получаем count
movieCriteria.select(cb.count(movieRoot));
...
//убираем orderBy
...
//получаем результат
Long count = entityManager.createQuery(movieCriteria).getSingleResult();
Либо дополнить второй условиями:
cq.where(.... //аналогично с join-ами
Если требуется как подсчет количества записей, так и выборка, и при этом нужно избежать дублирования кода, то можно вынести общую часть (создание условий и связей) в отдельные методы.
cq.where(createMovieConditions(movieRoot));
Виртуальный выделенный сервер (VDS) становится отличным выбором
Выполняю SQL запросы через JDBCЕсли запрос содержит переменную типа TABLE, то результат не возвращается:
Нужно из строки "Привет, как дела? (siteru)" удалить подстроку (site