[英]JPA Criteria API join query One To Many with condition
我有 2 張桌子
ID | 姓名 |
---|---|
1 | 亞歷克斯 |
ID | 姓名 | 地位 | 企業標識 |
---|---|---|---|
7 | iphone12 | 積極的 | 1 |
8 | iphone11 | 積極的 | 1 |
6 | iphone13 | 禁用 | 1 |
這種關系是一對多的(一個企業有很多產品)。 我想獲得一個Enterprise
,其所有Product
的條件是該Product
的Status
是ACTIVE
的
我怎樣才能得到 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.