首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QueryDSL用于SpringData连接实体筛选

QueryDSL用于SpringData连接实体筛选
EN

Stack Overflow用户
提问于 2018-05-14 21:24:06
回答 1查看 767关注 0票数 1

我试图在我的Spring数据服务中使用QueryDSL来实现类似于SQL的查询

代码语言:javascript
复制
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接口对我无效,因为谓词产生了交叉连接:

代码语言:javascript
复制
memberEntity.role.eq(roleSelector).andAnyOf(
    memberEntity.hackathonEntity.id.eq(hackathonId),
    memberEntity.projectEntity.hackathonEntity.id.eq(hackathonId)
)

我试图使用JPAQuery来手动管理连接策略,但也面临着同样的问题:

代码语言:javascript
复制
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_.publishstatus作为publishs2_10_,选择memberenti0_.role作为role3_10_从public.member memberenti0_左侧加入public.project projectent1_ on (memberenti0_.projectid=projectent1_.id),其中和#on 20#?还有(memberenti0_.hackathonid=?还是projectent2_.hackathonid=?)

使用QueryDSL过滤连接实体的正确方法是什么?或者,是否有任何好的替代技术用于查询构建?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-15 23:44:14

将查询的andAnyOf部分更改为

代码语言:javascript
复制
.andAnyOf(memberEntity.hackathonEntity.id.eq(hackathonId), 
    projectEntity.hackathonEntity.id.eq(hackathonId)));

在Hibernate中应该只剩下一个连接而没有交叉连接。

编辑:如果这仍然不适用于你,我建议编辑你的问题,包括你如何映射你的实体。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50339220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档