java - distinct and order by relationship in JPA with criteriabuilder -
i have these 3 beans:
user.java
@entity @table(name = "usuario") public class user implements serializable { private static final long serialversionuid = 1l; private set<role> roles = new hashset<role>(0); private string login; private string password; private integer id; private destinationgroup destinationgroup; .... // getters , setters destinationgroup.java
@entity @table (name = "grupo_destinatario") public class destinationgroup implements serializable { private static final long serialversionuid = 1l; private string name; private integer id; private set<user> users = new hashset<user>(); .... // getters , setters role.java
@entity @table (name = "perfil") public class role extends abstractmodel implements serializable { private static final long serialversionuid = 1l; private string name; private integer id; .... // getters , setters i want users don't have role "admin", ordered name of destinationgroup. use code:
usertest.java
criteriabuilder criteriabuilder = entitymanager.getcriteriabuilder(); criteriaquery<user> criteriaquery = criteriabuilder.createquery(user.class); root<user> root = criteriaquery.from(user.class); join<user, role> path = root.join("roles", jointype.left); expression<object> filter = path.get("name"); predicate localpredicate = criteriabuilder.notequal(filter, "admin"); criteriaquery.where(localpredicate); join<user, destinationgroup> path2 = root.join("destinationgroup", jointype.left); expression<object> sort = path2.get("name"); list<order> orders = new arraylist<order>(); orders.add(criteriabuilder.asc(sort)); criteriaquery.orderby(orders); typedquery<user> query = entitymanager.createquery(criteriaquery); list<user> users = query.getresultlist(); but returns duplicated results if user has multiple roles. add in second line of test code: ".distinct(true)" retrieve 1 result of each user:
criteriaquery<user> criteriaquery = criteriabuilder.createquery(user.class).distinct(true); then exception thrown: "for select distinct, order expressions must appear in select list". can't remove orderby , want avoid duplicated results. how can solve this? can add relationships distinct?
i tried this solution jointype.inner duplicated results too.
Comments
Post a Comment