gpt4 book ai didi

java - QueryDSL 如何创建具有自己的联接的子查询?

转载 作者:行者123 更新时间:2023-12-01 16:45:03 29 4
gpt4 key购买 nike

我正在尝试为 QueryDSL 选择构建一个子查询,该查询在 BooleanExpression 中使用 exists 子句。

数据模型使得存在包含单个媒体的项目。媒体可以有多种维度。我希望选择具有特定维度数据的项目,并使用子查询来完成此任务。

子查询如下所示:

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:意外标记:元素

导致错误的生成部分如下所示(来自 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))

关于java - QueryDSL 如何创建具有自己的联接的子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61798126/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com