Querydsl:如何按列进行左连接

Posted

技术标签:

【中文标题】Querydsl:如何按列进行左连接【英文标题】:Querydsl: how to make left join by column 【发布时间】:2015-04-24 00:47:29 【问题描述】:

我试图在 querydsl 中匹配这个 SQL 查询

SELECT tr.* FROM test.TRIP_REQ tr left outer join test.ADDR_BOOK ab on tr.REQ_USERID=ab.USER_ID  

如果您加入标识列,但我知道如何进行左连接查询,但很难使其与加入 2 个替代列一起工作。 tr.REQ_USERID 和 ab.USER_ID 不是标识列

这是我的查询 dsl:

QTripReq qTripReq = QTripReq.tripReq;
QAddressBook qABook = QAddressBook.addressBook;
JPAQuery query = new JPAQuery(entityManager);
query.from(qTripReq).leftJoin(qABook).on(qTripReq.requestorUser.id.eq(qABook.user.id)).list(qTripReq);

这会引发错误:

连接的预期路径! [select tripReq from com.TripReq tripReq left join ADDR_BOOK addressBook with tripReq.requestorUser.id = addressBook.user.id where tripReq.assignedCompany.id = ?1]

【问题讨论】:

【参考方案1】:

你需要给leftJoin()添加一个目标实体路径,这样

QTripReq qTripReq = QTripReq.tripReq;
QAddressBook qABook = QAddressBook.addressBook;
JPAQuery query = new JPAQuery(entityManager);
query.from(qTripReq).leftJoin(qTripReq.addressBook, qABook).on(qTripReq.requestorUser.id.eq(qABook.user.id)).list(qTripReq);

查看文档中的Using joins 部分。

【讨论】:

以上是关于Querydsl:如何按列进行左连接的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 Hibernate 在组件上使用左外连接进行命名查询?

如何使用左连接和内连接编写 laravel 查询?

如何在 LINQ 中使用左外连接进行 SQL 查询?

如何使用 Laravel 进行左外连接?

与学说进行左连接后如何计算元素

如何在熊猫中进行左外连接排除