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

Popular posts from this blog

Sort a complex associative array in PHP -

vb.net - How to ignore if a cell is empty nothing -

recursion - Can every recursive algorithm be improved with dynamic programming? -