加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

如何在JOIN中使用JPA Criteria API

发布时间:2020-12-12 16:45:25 所属栏目:MsSql教程 来源:网络整理
导读:我有五个表:公司,产品/服务,地址,国家和 市. 公司可以拥有n类产品,1个地址1个国家 和1个城市内的地址实体. 用户选择了“英格兰 – 利兹”. 我现在知道,我必须选择每个公司从db那里的城市 是利兹和这些公司的产品/服务列表, 产品或服务.之后,该用户可以选择例
>我有五个表:公司,产品/服务,地址,国家和
市.
>公司可以拥有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")

看到,
http://en.wikibooks.org/wiki/Java_Persistence/Querying#Joining.2C_querying_on_a_OneToMany_relationship

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读