在构建将表不在
中的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中找到合适的构造来对此建模,但是我认为这将是可能的吗?
答案 0 :(得分:0)
典型地炮制了一些样品,我找到了正确的组合。
此解决方案要求在B和许多C之间建立一个ManyToOne
映射
query.innerJoin(QSales.branch, QBranch)
.innerJoin( QBranch.managers, QManager )
.on(QManager.name.eq('Alice'));
分支中有managers
的QueryDSL知道该怎么做并产生适用于我的SQL类型。
我仍然不知道如何解决此问题,因为管理人员未映射。