Comment utiliser l'API JPA Criteria dans JOIN

  • J'ai cinq tables: Entreprise, Produit, Service, Adresse, Pays et
    Ville.
  • Une Entreprise peut avoir n produits à la catégorie, 1 adresse 1 pays
    et 1 la ville à l'intérieur de l'entité adresse.
  • Un utilisateur a choisi de "Angleterre - Leeds".
  • Je sais maintenant que j'ai pour sélectionner toutes les entreprises à partir de db lorsque la ville de
    est de Leeds et de le remplir de produit/service-liste des sociétés
    des produits ou des services. Après que l'utilisateur peut sélectionner par exemple le dentiste
    à partir de la troisième liste.
  • Apres ce que je sais Enlgand - Leeds - Dentiste et j'ai à remplir
    la dernière liste avec compenies (dentistes à Leeds)

public class Company implements java.io.Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Short companyId;
@OneToOne(cascade=CascadeType.PERSIST)
private Address address;
private String companyName;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "company",cascade=CascadeType.PERSIST)
private Set<Product> products = new HashSet<Product>(0);

public class Product implements java.io.Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "productId", unique = true, nullable = false)
private Integer productId;
private Short branchId;
private String productName;
private String sku;
private String category; ------> I am using this field in company search (dentists, garages etc.)

Comment puis-je interroger uniquement les entreprises qui ont des produits à la catégorie dentiste?

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();

CriteriaQuery<Company> criteria = criteriaBuilder.createQuery( Company.class );
Root<Company> companyRoot = criteria.from( Company.class );
//criteria.select(companyRoot);

TypedQuery<Company> q = em.createQuery(criteria);
List<Company> results = q.getResultList();

Maintenant, j'ai chaque entreprise, comment puis-je sélectionner seulement les entreprises avec la bonne catégorie? Je pense que j'aurai besoin de JOIN mais comment je ne sais pas comment l'utiliser.

source d'informationauteur Sami | 2012-01-24