【发布时间】:2014-04-15 07:27:58
【问题描述】:
我正在使用 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 接口,它扩展了 JpaRepository 和 QueryDslPredicateExecutor。 这让我可以访问方法:
Page<T> findAll(com.mysema.query.types.Predicate predicate, Pageable pageable)
我知道通过创建新的 JPAQuery(entityManager) 可以轻松实现左连接。但我没有实体管理器显式注入 spring data jpa。 有没有简单的方法来构建带有左连接的谓词? 希望这里有人经历过这种情况并能给我举个例子。 谢谢。
弗雷。
【问题讨论】:
-
您能用 JPQL 而不是 SQL 来表达您的需求吗?我现在不确定你是否需要左连接来加载或其他东西。
-
嗨 Timo,JPQL 表达式已按要求添加
标签: java spring jpa join querydsl