java - 左加入 spring data jpa 和 querydsl

标签 java spring jpa join querydsl

我正在使用 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/

相关文章:

java - 从hibernate中的sessionfactory实体类中检索主键

java - JPA + Datanucleus + 连接池 : connections are opened/closed with each statement

java - 递归程序具有一个带有示例方法的StackOverflowError

java - 如何将JFreeChart库添加到JDK?错误: package org. jfree.chart不存在

java - 如何在单例类中实现Map?

java - ScheduledExecutorService 在我的 junit 测试期间不起作用

java - spring 上下文中的功能切换

java - 如何检查 CachedRowSet 中是否存在列名?

java - 使用 RestTemplate 获取模型对象

Java HashMap 通过 JPA 作为 MySQL 中的一个元素