当前位置: 首页 > 面试题库 >

QueryDsl-集合表达式中的子查询

陶修洁
2023-03-14
问题内容

我正在使用spring-data-jpa和querydsl(3.2.3)
,有一种情况是我根据用户文件管理器/输入创建谓词集。所有这些都来了BooleanExpression

我的简化模型如下所示:

@Entity
public class Invoice {
    @ManyToOne
    private Supplier supplier;
}

@Entity
public class Supplier {
    private String number;
}

@Entity
public class Company {
    private String number;
    private boolean active
}

现在,我正在努力的是这个查询:

SELECT * FROM Invoice WHERE invoice.supplier.number in (SELECT number from Company where active=true)

因此,基本上我需要以CollectionExpression类似的格式进行子查询,该格式将获取所有公司编号并将其设置为in()表达式。

我的spring-
data存储库实现CustomQueryDslJpaRepository了反过来扩展JpaRepository和的工具QueryDslPredicateExecutor
我希望答案很简单,但是我对querydsl还是很陌生,到目前为止还没有找到解决方案。


问题答案:

这是jaiwo99的答案的一种变体,形式更像JPAesque

BooleanExpression exp = invoice.supplier.number.in(new JPASubQuery()
    .from(company)
    .where(company.active.isTrue())
    .list(company.nu‌​mber));

随意将其合并为原始答案。



 类似资料:
  • 我正在使用spring-data-jpa和querydsl(3.2.3) 在一个场景中,我正在基于用户filer/input创建一组谓词。所有这些都来自。 我的spring-data存储库实现了,它又扩展了和。 我希望这方面的答案是直接的,但我对querydsl还是个新手,到目前为止还没有找到解决方案。

  • 我将以下SQL作为本机查询运行,但我想知道是否有一种方法可以在JPAQuery中运行它,以便使用元组或类实例化。 为了精确起见,我使用了别名而不是qtypes。

  • 我试图使用一个投影来从一个实体中提取数据,它有一些关系。然而。投影上的构造函数接受三个参数;一个集合,整数和另一个整数。如果没有这个集合作为参数,这一切都很好,但是一旦我添加了这个集合,我就开始得到SQL语法查询错误。 这里有一个我正在使用的例子... 下面是我正在使用的查询(不完全相同,因为这是我正在处理的问题的简化版本).... 所以,我想我的主要问题是,我如何将一个集合作为一个对象包含在投影

  • 我有这样的查询语句: 如果我在jpa中与querydsl(com.querydsl)一起使用它(这是scala,不重要): 当我调试测试时,它总是抛出 对方法public abstract Purchase PurchaseRepository.GetByTrackingNo(java.lang.String)使用命名参数,但在注释查询“从T_EC_PURCHASE t中选择t.pt_note,t

  • 问题内容: 我正在使用QueryDSL构建SQL查询,该查询包含以联合身份加入的多个子查询。这是我查询的基础: 然后,我有几个子查询来获取与事务关联的客户端名称。我将示例缩减为两个: 如何将它们结合在一起,并通过我的主要查询加入结合?这是我目前的尝试: 这样可以编译,但是在尝试运行时会在运行时生成无效的SQL 。可能的错误: 子查询联合的语法。 命名子查询结果列的表达式与中使用的路径表达式之间的连

  • 通过一些重要的挖掘,我们发现spring-data-rest with query-dsl可以让REST API客户机轻松地过滤实体的大多数属性。 这个问题也很有用:Spring Data REST的QueryDSL集成是否可以用于执行更复杂的查询?