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

我正在使用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));

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

以上是 QueryDsl-集合表达式中的子查询 的全部内容, 来源链接: utcz.com/qa/427206.html

回到顶部