0

I have 2 Entity:

@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;
}

I want to search Organization by Tin name using CriteriaBuilder and predicates

For search I want to have list of predicates

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

}
m.zemlyanoi
  • 335
  • 1
  • 5
  • 15
  • have you tried something to achieve this? – Vaibs Feb 14 '17 at 08:28
  • Yes, I've tried this one : CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); CriteriaQuery criteria = criteriaBuilder.createQuery(Tin.class); Root companyRoot = criteria.from( Tin.class ); predicates.add( criteriaBuilder.equal(companyRoot.join("tin").get("tin"), orgSearchCriteria.getTaxIdNumber()) ); – m.zemlyanoi Feb 14 '17 at 08:36
  • please share your code so we get some idea – Vaibs Feb 14 '17 at 08:36

1 Answers1

0

This should work for your case

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);
Rostyslav
  • 91
  • 2
  • 6