Выберите все записи из одной таблицы и одного столбца из другой таблицы и заполните значения в этом одном столбце, основываясь на некотором условии - PullRequest
0 голосов
/ 19 января 2019

У меня есть две таблицы Pet и POST.
В POST у меня есть связь между Pet и User таблицей.
Пользователь может отметить питомца как избранного, и запись будет добавлена ​​в таблицу POST.

Теперь я хочу получить всех домашних животных на целевой странице, но также хочу получить флаг о домашних животных, которые были отмечены как избранные текущим пользователем.
Это то, что я хочу реализовать в QueryDSL.

Следующий код, который я пробовал. Но код возвращают только любимые питомцы пользователя. Но мое требование заключается в том, чтобы все домашние животные были извлечены с fav_flag как true для домашних животных, помеченных как любимые.

Я получаю только любимых питомцев для этого пользователя. Но я хочу, чтобы отображались все домашние животные и чтобы флаг был отмечен для любимых домашних животных.

JPAQuery<PetListDTO> jpaQuery = jpaQueryFactory
    .select(Projections.fields(PetListDTO.class, qPet.id, qPet.petName, qPet.thumbnail.as("media"), qPet.price, qPet.owner.id.as("ownerId"), qPost.favorite.as("isFav"), qUserDetails.isCertified.as("isCertified")))
    .from(qPet)
    .leftJoin(qUserDetails).on(qUserDetails.user.id.eq(qPet.owner.id))
    .leftJoin(qPost).on(qPost.pet.id.eq(qPet.id)).where(qPost.buyer.id.eq(browsePetRequestDTO.getUserId()))
    .where(filterBrowsePetOption)
    .offset(pageable.getOffset())
    .limit(pageable.getPageSize());
List<PetListDTO> res = jpaQuery.fetch();

Ввод будет browsePetRequestDTO.getUserId() = 4.
Ожидаемый результат - список PetListDTO. например:

[{fav: true fromOtherSource: false id: 77 media: "s3.us-east-2.amazonaws.com/s3-petquest-dev/images/…" ownerId: 7 petName: "Test New" petStatus: нулевая цена: 123}, {fav: false fromOtherSource: false id: 77 медиа: "s3.us-east-2.amazonaws.com/s3-petquest-dev/images/…" ownerId: 7 petName: "Test New" petStatus: нулевая цена: 123}]

...