当前位置: 首页 > 知识库问答 >
问题:

使用spring data jpa和querydsl左联接

谢阳成
2023-03-14

我使用了spring data,jpa和querydsl,并学习了如何编写简单、漂亮的查询以左联接两个表。假设我有一个Project实体和一个Task实体,在Project中定义了OneToMany关系,我想做如下操作:

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接口,它扩展了JPararePository和QuerydsLPredicateExecutor。使我能够访问方法:

Page<T> findAll(com.mysema.query.types.Predicate predicate, Pageable pageable) 

我知道通过创建一个新的JPAQuery(entityManager)可以很容易地实现左联接。但我没有将实体管理器显式注入spring data JPA。有没有好的简单的方法来构建一个带有左联接的谓词?希望在座的有经验的人能给我一个例子。谢谢你。

弗雷。

共有1个答案

庄欣然
2023-03-14

如果您想要表达对任务的约束,那么您可以这样做

QProject.project.tasks.any().id.eq(searchTerm)

如果希望通过左联接来表达某些任务的预加载,则不能通过谓词来表达。Querydsl中的谓词是查询的where、join-on和having部分的布尔表达式

 类似资料: