jpa - 如何在 JOIN 中使用 JPA Criteria API

标签 jpa join

  • 我有五个表:公司、产品/服务、地址、国家和地区
    城市。
  • 一个公司可以有 n 个产品的类别,1 个地址和 1 个国家
    地址实体内的 1 个城市。
  • 用户选择了“英格兰 - 利兹”。
  • 我现在知道我必须从 db where city 中选择每个公司
    是利兹并用这些公司的产品/服务列表填充
    产品或服务。之后,用户可以选择例如牙医
    从第三个名单。
  • 之后我知道 Enlgand - 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.)
    

    如何只查询那些有牙医类产品的公司?
    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

    关于jpa - 如何在 JOIN 中使用 JPA Criteria API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8980869/

    相关文章:

    java - Spring数据命名查询选择两列相等的实体

    java - JPA @NamedQuery 有两个表,可能吗?

    linux - Bash - 按列加入(合并)文件

    python - 将 .dbf 连接到 .shp - 然后计算字段脚本 - 错误处理,脚本在没有连接时退出

    php - mysql 使用共享列条目连接两行

    sql - mysql JOIN,这是如何解释的?

    Oracle 从一个查询中选择另一个查询中不存在的行

    java - 为什么 Hibernate 抛出异常 "java.lang.NoSuchMethodError: javax.persistence.UniqueConstraint.name()"?

    java - 如何在 AppEngine 中使用 JPA 2 获取实体、在 GWT 中更新并保存?

    java - 在 weblogic 12c 上运行的 REST 项目 (netbeans) 上,EntityManager 始终为 null