2017-02-14 2 views
0

Ich habe 2 Entity:Hibernate Prädikats Suche in verknüpften Tabelle

@Entity 
public class Organization { 
    @Column(name = "name") 
    public String name; 

    @OneToMany(mappedBy = "organization") 
    public Collection<Tin> tin; 
} 

@Entity 
public class Tin { 
    @Column(name = "name") 
    public String name; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "ORGANIZATION_ID", nullable = false) 
    public Organization organization; 
} 

Ich möchte Organisation von Tin Namen suchen CriteriaBuilder mit und Prädikate

Für die Suche I Liste der Prädikate haben wollen

List<Predicate> getPredicates() { 
    List<Predicate> predicates = new ArrayList<Predicate>(); 
    .... 
    if (StringUtils.isNotBlank(orgSearchCriteria.getTaxIdNumber())) { 
       CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); 

       CriteriaQuery<Tin> criteria = criteriaBuilder.createQuery(Tin.class); 
       Root<Tin> companyRoot = criteria.from(Tin.class); 
       predicates.add(
         criteriaBuilder.equal(companyRoot.join("tin").get("name"), orgSearchCriteria.getName()) 
       ); 
      } 
    .... 
    return predicates 

} 
+0

hast du etwas versucht, um dies zu erreichen? – Vaibs

+0

Ja, habe ich versucht, dieses: CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); CriteriaQuery criteria = criteriaBuilder.createQuery (Tin.class); Wurzel companyRoot = criteria.from (Tin.class); predicates.add ( criteriaBuilder.equal (companyRoot.join ("tin") erhalten ("tin"), orgSearchCriteria.getTaxIdNumber()) .); –

+0

Bitte teilen Sie Ihren Code, so bekommen wir eine Idee – Vaibs

Antwort

0

Dies sollte für Ihren Fall

root = criteriaQuery.from(Organization.class); 
Join<Organization, Set<Tin>> resource = root.join("tin"); 
criteriaQuery = criteriaQuery.select(root); 
Predicate predicate = criteriaBuilder.equal(resource.get(NAME_COLUMN), "name"); 
criteriaQuery.where(predicate); 
entityManager.createQuery(criteriaQuery); 
funktionieren
+0

Danke Das löste mein Problem aber mit dieser builder.createQuery (Organization.class) .distinct (true); –