Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用spring数据jpa和querydsl进行左连接_Java_Spring_Jpa_Join_Querydsl - Fatal编程技术网

Java 使用spring数据jpa和querydsl进行左连接

Java 使用spring数据jpa和querydsl进行左连接,java,spring,jpa,join,querydsl,Java,Spring,Jpa,Join,Querydsl,我正在使用spring数据jpa和querydsl,并被困在如何编写简单的nice查询来左键联接两个表的问题上。 假设我有一个项目实体和一个任务实体,在项目中定义了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.projec

我正在使用spring数据jpa和querydsl,并被困在如何编写简单的nice查询来左键联接两个表的问题上。 假设我有一个项目实体和一个任务实体,在项目中定义了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接口,它扩展了JpaRepository和QueryDSL谓词执行器。 这使我能够访问以下方法:

Page<T> findAll(com.mysema.query.types.Predicate predicate, Pageable pageable) 
Page findAll(com.mysema.query.types.Predicate谓词,可分页)
我知道通过创建一个新的JPAQuery(entityManager)可以很容易地实现左连接。但我并没有向实体管理器显式地注入spring数据jpa。 有没有好的简单的方法用左连接构建谓词? 希望有人在这里有经验,并能给我一个例子。 多谢各位


弗雷。

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

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

如果您想通过左联接来表示某些任务的预加载,那么不能通过谓词来表示。Querydsl中的谓词是一个布尔表达式,表示查询的where、join和having部分。

您能用JPQL而不是SQL表达您需要的内容吗?我现在不确定您是否需要左连接进行加载或其他操作。Hi Timo,JPQL表达式按请求添加Hi Timo,感谢您的回复。您的意思是说any()只能提供约束,而不从外部表加载数据吗?是的,此解决方案仅对结果提供约束,不影响加载