在QueryDSL库中,com.mysema.query.types.expr.SimpleExpression<T>该类有一个SimpleExpression.in(CollectionExpression<?, ? extends T>)方法,该方法应该采用一个应该返回集合的表达式.但是我找不到创建类型对象的方法com.mysema.query.types.CollectionExpression<?, ? extends T>.
我的查询表达式如下所示:
QEvent.event.organization.in(expression)
Run Code Online (Sandbox Code Playgroud)
在哪里我希望它expression是这样的:
QOrganization.organization.country.in("India", "USA")
Run Code Online (Sandbox Code Playgroud)
但第二个表达式是类型com.mysema.query.types.expr.BooleanExpression,我无法找到将其转换为的方法com.mysema.query.types.CollectionExpression<?, ? extends T>.
我查看了QueryDSL API文档但找不到任何相关内容.
Tim*_*per 11
您无法将BooleanExpression转换为CollectionExpression,原因与您无法将java.lang.Boolean转换为java.util.Collection的原因相同.它们不兼容.
以下表达对您来说意味着什么
QEvent.event.organization.in(
QOrganization.organization.country.in("India", "USA"))
Run Code Online (Sandbox Code Playgroud)
你可能试着表达这样的话吗?
QEvent event = QEvent.event;
QOrganization organization = QOrganization.organization;
query.from(event)
.innerJoin(event.organization, organization)
.where(organization.country.in("India", "USA"))
.list(event);
Run Code Online (Sandbox Code Playgroud)
或者更简单
QEvent event = QEvent.event;
query.from(event)
.where(event.organization.country.in("India", "USA"))
.list(event);
Run Code Online (Sandbox Code Playgroud)
我想你试图描述的是使用子查询的表达式.像这样的东西
query.from(event)
.where(event.organization.in( subQuery().from(organization)
.where(organization.country.in("India", "USA")))
.list(event);
Run Code Online (Sandbox Code Playgroud)
subQuery()的实现是特定于Querydsl后端的.如果您使用连接,那么每个匹配事件 - 组织组合和子查询都会获得一行,您将获得具有满足给定约束的组织的唯一事件.
连接与子查询的性能差异是特定于实现的.
您使用哪个Querydsl后端?JPA,SQL还是其他什么?
| 归档时间: |
|
| 查看次数: |
15256 次 |
| 最近记录: |