У меня есть две таблицы 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}]