Оставил соединение с весенними данными jpa и querydsl

Я использую весенние данные jpa и querydsl и поймал, как написать простой красивый запрос, чтобы соединить две таблицы слева. Предположим, у меня есть сущность Project и сущность Task с отношением OneToMany, определенным в Project, я хотел бы сделать что-то вроде:

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). Но у меня нет менеджера сущностей, который явно вводит данные весны jpa. Есть ли хороший и простой способ построить предикат с левым соединением? Желаю, чтобы кто-то здесь испытал это и смог привести мне пример. Спасибо.

Frey.

1 ответ

Если вы хотите выразить ограничение на задачи, то вы можете сделать это следующим образом

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

Если вы хотите выразить предварительную загрузку определенных задач вместо этого через левое соединение, вы не можете выразить это через предикат. Предикат в Querydsl - это логическое выражение для where, присоединения и частей запроса.

Другие вопросы по тегам