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:如何按列进行左连接的主要内容,如果未能解决你的问题,请参考以下文章