[英]How to write JPA criteria query select a with JOIN
我在如何編寫 Join 而不是來自 Application 的 select 時遇到問題
所以我必須實體應用程序和停用
deactivated 有一個字段:
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "application_id")
private Application application;
並且應用程序有:
@Id
private Long id;
我不知道如何用語言描述問題,所以我將粘貼 JPQL:
SELECT a FROM applications a LEFT OUTER JOIN deactivated_applications da on a.id = da.application_id WHERE da.filedeactivated=false;
我收到參數的查詢代碼:
{ CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Application> cq = criteriaBuilder.createQuery(Application.class);
Root<Application> root = cq.from(Application.class);
//SearchQuery to TO SQLsearchQuery to specification, to Predicate
Predicate searchQueryPredicate = null;
if (!searchQuery.getCriteria().isEmpty())
searchQueryPredicate = SqlSearchQuery.of(searchQuery).toSpecification(Application.class).toPredicate(root, cq, criteriaBuilder);}
現在我需要讓這個查詢在以前的 SQL 查詢上運行
這看起來像是可以使用子選擇解決的問題。
要從應用程序 ID 屬於已停用應用程序且 filedeactivate 為假的應用程序中進行選擇,請使用以下類型的查詢結構:
SELECT a FROM applications a WHERE a.Id MEMBER OF (SELECT b.application_id FROM deactivatedapplications b WHERE b.filedeactivated = false)
使用https://thorben-janssen.com/jpql/#Subselects中的書籍和作者示例描述了此方法,其中 Thorben 使用子選擇 select 編寫過一本書的作者。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.