簡體   English   中英

如何編寫 JPA 條件查詢 select a with JOIN

[英]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.

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