QueryDSL动态表联接

问题描述

我在弄清楚我想做的事情是否可行以及如何实现时遇到了麻烦。 我有三个通过唯一标识符连接的表。

public class Teams{
 private UUID teamUuid;
 private Integer state;
}
public class TeamGoals{
    private UUID teamGoalUuid;
    prviate UUID teamUuid;
    private UUID CauSEOrgUuid
public class CauSEOrgMap {

    private UUID cauSEOrgUuid;
    private UUID organization;
    private UUID cause;
}

我正在尝试从Teams表中检索数据。我输入的是原因UUID,CauSEOrgMap中的组织UUID,Teams表中的状态或三者的任意组合或不组合(在这种情况下,应返回整个Teams表)。

public List<Teams> findTeamsListByCauSEOrgState(String cause,String org,Integer state,Boolean featured) {

    QTeams team = QTeams.teams;
    QCauSEOrgMap cauSEOrgMap = QCauSEOrgMap.cauSEOrgMap;
    QTeamGoals teamGoals = QTeamGoals.teamGoals;
    BooleanBuilder booleanBuilder = new BooleanBuilder();
    List<Teams> teamList = queryFactory.selectFrom(team)
            .where(
                    isstateDefined(state.toString())).fetch();

        //NO IDEA HOW TO ADD JOINS
    return teamList;
}

private BooleanExpression isstateDefined(String state){
    return state != null ? QTeams.teams.teamState.like(state) : null;
}

因此,我需要根据输入的输入组合来创建动态的谓词。我遇到的问题是通过TeamGoals使CauSEOrgMap上的联接动态化。如果没有因果关系或组织单位的UUID,则无需进行任何联接。

我猜我可以用BooleanExpression或BooleanBuilder来构建谓词,但是我空了。

有什么想法吗?

更新

更多阅读和工作后,我认为我可能有解决方案。它可以编译,但是我还不能测试它。

如果有效,我将更新并回复该帖子。

同时,如果有更好的方法,任何反馈仍将不胜感激。



 QTeams team = QTeams.teams;
        QCauSEOrgMap cauSEOrgMap = QCauSEOrgMap.cauSEOrgMap;
        QTeamGoals teamGoals = QTeamGoals.teamGoals;
        BooleanBuilder dynamicWhere = new BooleanBuilder();
        Pageable pageable = new OffsetBasedPageRequest(offset,limit); //Custom Pagable implementation


        dynamicWhere.and(Expressions.asBoolean(true).isTrue());
        if(cause != null){
            dynamicWhere.and(team.teamUuid.in(JPAExpressions.select(teamGoals.team.teamUuid).from(teamGoals).where(teamGoals.cauSEOrg.cause.causeUuid.eq(cause))));
        }
        if(org != null){
            dynamicWhere.and(team.teamUuid.in(JPAExpressions.select(teamGoals.team.teamUuid).from(teamGoals).where(teamGoals.cauSEOrg.organization.orgUuid.eq(org))));
        }
        if(state != null){
            dynamicWhere.and(team.teamState.eq(state);
        }
        Page<Teams> teamList = teamsRepository.findAll(dynamicWhere,pageable);

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...