Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JPQL: inner join with group by

I'm trying to retrieve data from database using criteriabuilder. It's working great, query is almost perfect... almost. Unfortunately Java don't want me to use group by or distinct as a result of my query. How to make Java retrieve only unique records? My code is here:

List<Documentation> documentationList = new ArrayList<>();
DatabaseConnector dc = new DatabaseConnector();
List<Predicate> criteria = new ArrayList<Predicate>();
EntityManager em = dc.getEntityManager();
CriteriaBuilder builder = em.getCriteriaBuilder();

CriteriaQuery<Documentation> select = builder.createQuery(Documentation.class);
Root<Documentation> u = select.from(Documentation.class);
Join<Documentation, DocumentationUser> du = u.join("documentationUserCollection",     JoinType.INNER);

javax.persistence.Query q = em.createQuery(select);
select.groupBy(u.<String>get("documentationId"));
select.distinct(true);

documentationList = q.setMaxResults(pageSize).setFirstResult(first).getResultList();
like image 259
J33nn Avatar asked Dec 15 '25 20:12

J33nn


1 Answers

Try swapping 2 lines lower the line that creates the query:

select.groupBy(u.<String>get("documentationId"));
select.distinct(true);

javax.persistence.Query q = em.createQuery(select);
like image 187
perissf Avatar answered Dec 17 '25 15:12

perissf



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!