簡體   English   中英

JPA Criteria API連接查詢一對多有條件

[英]JPA Criteria API join query One To Many with condition

我有 2 張桌子

  1. 企業
ID 姓名
1 亞歷克斯
  1. 產品
ID 姓名 地位 企業標識
7 iphone12 積極的 1
8 iphone11 積極的 1
6 iphone13 禁用 1

這種關系是一對多的(一個企業有很多產品)。 我想獲得一個Enterprise ,其所有Product的條件是該ProductStatusACTIVE

我怎樣才能得到 json 的結果是

  {
"id": "1",
"name": "Alex",
"products": [
  {
    "id": "7",
    "name": "Iphone12",      
  },
  {
    "id": "8",
    "name": "Iphone11",
  }
 ]
}






  

假設您的實體或多或少是這樣的:

@Entity
class Enterprise {
   ...
   @OneToMany
   List<Product> products;
}

@Entity
class Product {
   ...

   String status;
}

以下標准應該有效:

CriteriaQuery<Enterprise> criteria = builder.createQuery(Enterprise.class);
Root<Author> root = criteria.from( Enterprise.class );
Join<Object, Object> productsJoin = root.join( "products" );
criteria.where( builder.equal( product.get("status"), "ACTIVE"  ) );
List<Enterprise> result = session.createCriteria(criteria).getResultList();

它與 HQL 查詢相同:

from Enterprise e join e.products p
where p.status = 'ACTIVE'

如果您想立即加載關聯,可以將root.join替換為root.fetch

CriteriaQuery<Enterprise> criteria = builder.createQuery(Enterprise.class);
Root<Author> root = criteria.from( Enterprise.class );
Join<Object, Object> productsJoin = (Join<Object, Object>)root.fetch( "products" );
criteria.where( builder.equal( productsJoin.get("status"), "ACTIVE"  ) );
List<Enterprise> result = session.createCriteria(criteria).getResultList();

這是等效的 HQL 查詢:

from Enterprise e join fetch e.products p
where p.status = 'ACTIVE'

您可以在本文Hibernate ORM 文檔中找到更多示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM