- У меня пять таблиц: компания, продукт/услуга, адрес, страна и Город.
- Компания может иметь n продуктов с категорией, 1 адрес с 1 страной и 1 город внутри объекта адреса.
- Пользователь выбрал "Англия - Лидс".
- Теперь я знаю, что я должен выбрать все компании из db, где город является Лидсом и заполняет продукт/сервисный список этими компаниями, продуктов или услуг. После этого пользователь может выбрать, например, дантист из третьего списка.
- После этого я знаю Enlgand - Leeds - Dentist, и я должен заселить последний список с компенсами (дантисты в Лидсе)
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.)
Как я могу запросить только те компании, у которых есть продукты с дантистом категории?
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();
Теперь у меня есть каждая компания, как я могу выбрать только компании с соответствующей категорией? Я думаю, мне понадобится JOIN
, но как я не знаю, как его использовать.