簡體   English   中英

QueryDSL 如何創建帶有自己連接的子查詢?

[英]QueryDSL how do I create a SubQuery with its own joins?

我正在嘗試為在 BooleanExpression 中使用exists子句的 QueryDSL select 構建子查詢。

數據 model 使得有些項目包含單個媒體。 媒體可以有很多維度。 我正在尋找具有特定維度數據的 select 項目,並且正在使用子查詢來實現這一點。

子查詢如下所示:

QProject project = QProject.project;
QMedia media = QMedia.media;

Predicate subExpression = JPAExpressions.selectOne()
            .from(media)
            .innerJoin(media.dimensions)
            .where(project.media.id.eq(media.id),
                dimension.dimensionType.id.eq(Long.valueOf(inputDimensionType))).exists();

我將其存儲為謂詞,但是當我嘗試在父查詢中使用它時出現錯誤: antlr.NoViableAltException: unexpected token: elements

導致錯誤的生成部分看起來像這樣(來自 hibernate.hql.internal 日志):

... and ((exists (select 1
from com.app.model.Media media
  inner join elements(media.dimensions)

這是當我將它插入到這樣的主查詢時發生的錯誤:

JPAQuery<ResponseCurve> query = new JPAQuery<>(this.entityManager);
query.select().from(project)
  .where(project.state.eq(inputState))
  .where(subExpression);

此查詢有兩個可能的問題:

  1. 您正在嘗試引用別名dimensions ,但您從未將其與加入media.dimensions相關聯
  2. 您在沒有連接的情況下取消引用dimension.dimensionType 對於標識符值,這是可能的,對於任何其他屬性,則不是。

關於什么:

QProject project = QProject.project;
QMedia media = QMedia.media;
QDimension dimension = QDimension.dimension;

Predicate subExpression = JPAExpressions.selectOne()
        .from(project.media, media)
        .innerJoin(media.dimensions, dimension )
        .on(dimension.dimensionType.id.eq(Long.valueOf(inputDimensionType))

暫無
暫無

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

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