我正在尝试在我的Spring数据服务中使用查询DSL来实现类似于SQL的查询
SELECT member.*
FROM member
LEFT JOIN project on member.projectid = project.id
WHERE
member.role = 'EXPERT' AND (
project.hackathonid = :hackathonId OR
member.hackathonid = :hackathonId
)
成员可以是项目或黑客马拉松的成员。项目是黑客马拉松的一部分。我试图找到哈查顿和子项目的所有成员。
因为谓词产生了交叉连接,所以QueryDslPredicateExecutor接口对我不起作用:
memberEntity.role.eq(roleSelector).andAnyOf(
memberEntity.hackathonEntity.id.eq(hackathonId),
memberEntity.projectEntity.hackathonEntity.id.eq(hackathonId)
)
我尝试过使用JPAQuery来手动管理连接策略,但是也遇到了同样的问题:
query.from(memberEntity)
.leftJoin(projectEntity).on(memberEntity.projectEntity.id.eq(projectEntity.id))
.where(
memberEntity.role.eq(roleSelector).andAnyOf(
memberEntity.hackathonEntity.id.eq(hackathonId),
memberEntity.projectEntity.hackathonEntity.id.eq(hackathonId)
)
)
Hibernate:选择memberenti0_.id 作为id1_10_,选择“memberenti0_.hackathonid”作为hackatho4_10_,选择“memberenti0_.userid”作为userid5_10_,选择“memberenti0_.projectid”作为projecti6_10_,memberenti0_ 选择“发布状态”作为publishs2_10_,memberenti0_.角色作为role3_10_来自公共.成员memberenti0_左外侧加入公共项目projectent1_(memberenti0_.项目 id=projectent1_.id)交叉加入公共项目projectent2_其中memberenti0_.投影 id=projectent2_.id 和memberenti0_.role=?和(memberenti0_.哈卡托尼德=? 或projectent2_.哈卡托尼德=?)
使用QueryDSL筛选加入的实体的正确方法是什么?或者有什么好的查询构建替代技术吗?
将查询的“和任何
部分”更改为
.andAnyOf(memberEntity.hackathonEntity.id.eq(hackathonId),
projectEntity.hackathonEntity.id.eq(hackathonId)));
应该让你在Hibernate中只有一个左连接,没有交叉连接。
编辑:如果这仍然对你不起作用,我建议编辑你的问题,包括你如何映射你的实体。
我想知道如何使用JPA标准API通过相关实体的外键过滤实体。 假设我有两个实体如下: 我想查询ID(1,2,3)部门下的员工。
我试图将QueryDSL与Spring Data JPA一起使用。
本文向大家介绍springData使用QueryDsl的示例代码,包括了springData使用QueryDsl的示例代码的使用技巧和注意事项,需要的朋友参考一下 经过多年,spring data jpa越来越完善,在版本迭代的过程中,会不断增加功能,今天看新的reference发现有Querydsl.然后搜索到上面的参考资料2 无论是JpaSpecificationExecutor,还是Quer
我只想检查一下QueryDSL版本3.1.1。-是否仍然不可能与子查询连接,就像这里的答案所写的:JPQL/querydsl:join subquery and get aliased column
我希望为结果提供内容过滤。我的(为简洁起见而编辑)实体如下所示: 节点: 场景: 来源: 下面是我希望实现的筛选器的一个示例。 给定一个SourceTypes集合,我希望选择所有场景,这样每个场景都会被其中一个类型的源引用。我使用QueryDSL和以下谓词实现了这一点: 一系列这些谓词被组合起来给出一个整体查询。即使只选择一个SourceType,结果查询看起来也是这样: 我相信上面发生的是交叉连