我正在使用 spring data jpa 和 querydsl,并且陷入了如何编写简单的查询以左连接两个表的问题。 假设我有一个 Project 实体和一个在 Project 中定义了 OneToMany 关系的 Task 实体,我想做类似的事情:
select * from project p left join task t on p.id = t.project_id where p.id = searchTerm
select * from project p left join task t on p.id = t.project_id where t.taskname = searchTerm
在 JPQL 中,它应该是:
select distinct p from Project p left join p.tasks t where t.projectID = searthTerm
select distinct p from Project p left join p.tasks t where t.taskName = searthTerm
我有一个 ProjectRepository 接口(interface),它扩展了 JpaRepository 和 QueryDslPredicateExecutor。 这使我可以访问方法:
Page<T> findAll(com.mysema.query.types.Predicate predicate, Pageable pageable)
我知道左连接可以通过创建一个新的 JPAQuery(entityManager) 轻松实现。但是我没有实体管理器显式注入(inject) spring data jpa。 有没有简单好用的方法来构建带左连接的谓词? 希望这里有人经历过这个并且能够给我一个例子。 谢谢。
弗雷。
最佳答案
如果你想表达对任务的约束,那么你可以这样做
QProject.project.tasks.any().id.eq(searchTerm)
如果您想通过左连接而不是表达某些任务的预加载,则不能通过谓词来表达。 Querydsl 中的谓词是查询的 where、join-on 和 having 部分的 boolean 表达式。
关于java - 左加入 spring data jpa 和 querydsl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23077155/