2016-05-11 15 views
0
i have a question about the hibernate many to many query. 


@Entity 
    @Table(name = "ROLES") 
    public class Role implements Serializable { 
     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
    @ManyToMany(mappedBy = "roleSet", fetch = FetchType.EAGER, cascade = CascadeType.MERGE) 
     @Fetch(FetchMode.SELECT) 
     private Set<Role> parentSet = new HashSet<Role>(); 
    @ManyToMany(targetEntity = Role.class, cascade = {CascadeType.ALL}, fetch = FetchType.EAGER) 
     @Fetch(FetchMode.SELECT) 
     @JoinTable(name = "R_PARENT_ROLE", joinColumns = @JoinColumn(name = "parentId"), inverseJoinColumns = @JoinColumn(name = "ROLEID")) 
     private Set<Role> roleSet = new HashSet<Role>(); 
    } 

i die Liste der Rolle der parentSet abfragen wollen, ist null der Code wie:Hibernate: Kriterien mit many-to-many und der HashSet ist null als Abfragebedingung

public <T> List<T> gets(Class<T> clazz){ 
     Session session = getSession(); 
     Criteria criteria = session.createCriteria(clazz); 
     criteria.createAlias("parentSet","parentSet"); 
      criteria.add(Restrictions.isNull("parentSet")); 
      return criteria.list();   
     } 

aber das Ergebnis ist nicht ich will. wie zu tun? Wer kann mir sagen? vielen Dank!

Antwort

0

i testen diesen Code:

public <T> List<T> gets(Class<T> clazz){ 
      Session session = getSession(); 
      Criteria criteria = session.createCriteria(clazz); 
      criteria.createAlias("roleSet","roleSet"); 
       criteria.add(Restrictions.neProperty("roleSet.id", "id")); 
       return criteria.list();   
      } 

und das Ergebnis als meine Not. ich denke, das parentSet ist null, so dass die role.id in der Tabelle r_parent_role nur für die parentid verwendet und nicht für die roleid verwendet. danke!