如何通过QueryDSL中的关系构造多个内部联接-引用中间表

时间:2018-12-31 12:17:14

标签: querydsl

在构建将表不在

中的QueryDSL中的内部联接组合起来的查询时,我遇到了麻烦
A --> B --> C 

关系,而是

A --> B <-- C

这是我的SQL查询

select s.* from sales s
inner join branch b on b.id = s.branch_id
inner join manager m on m.branch_id = b.id and m.name = 'Alice';

(从我的示例中提取:https://www.db-fiddle.com/f/r5uvEsivyAhrP6KSpwJxBA/1

对于我的QueryDSL,我有:

query.innerJoin(QSales.branch, QBranch)
     .innerJoin( ??? )

我不知道如何构造下一个内部联接。

我尝试过的所有内容都会给我带来Path expected for join!

这样的异常

假设,如果是一对一的话,我可以像这样链接...

query.innerJoin(QSales.branch, QBranch)
     .innerJoin( QBranch.manager, QManager ).on(QManager.name.eq('Alice'));

但是我没有那种关系。

我无法在QueryDSL中找到合适的构造来对此建模,但是我认为这将是可能的吗?

1 个答案:

答案 0 :(得分:0)

典型地炮制了一些样品,我找到了正确的组合。

此解决方案要求在B和许多C之间建立一个ManyToOne映射

query.innerJoin(QSales.branch, QBranch)
     .innerJoin( QBranch.managers, QManager )
       .on(QManager.name.eq('Alice'));

分支中有managers的QueryDSL知道该怎么做并产生适用于我的SQL类型。

我仍然不知道如何解决此问题,因为管理人员未映射。