[英]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);
此查詢有兩個可能的問題:
dimensions
,但您從未將其與加入media.dimensions
相關聯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.