>我有五个表:公司,产品/服务,地址,国家和
市.
>公司可以拥有n类产品,1个地址1个国家
和1个城市内的地址实体.
用户选择了“英格兰 – 利兹”.
>我现在知道,我必须选择每个公司从db那里的城市
是利兹和这些公司的产品/服务列表,
产品或服务.之后,该用户可以选择例如牙医
从第三个列表.
>之后,我知道Enlgand – 利兹 – 牙医,我必须填补
最后一个列表(包括利兹的牙医)
市.
>公司可以拥有n类产品,1个地址1个国家
和1个城市内的地址实体.
用户选择了“英格兰 – 利兹”.
>我现在知道,我必须选择每个公司从db那里的城市
是利兹和这些公司的产品/服务列表,
产品或服务.之后,该用户可以选择例如牙医
从第三个列表.
>之后,我知道Enlgand – 利兹 – 牙医,我必须填补
最后一个列表(包括利兹的牙医)
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,但是我怎么不知道如何使用它.
解决方法
使用join(),
criteriaBuilder.equal(companyRoot.join("products").get("category"),"dentist")