从一个表中选择所有记录,从另一表中选择一个列,然后根据某种条件填充该列中的值

时间:2019-01-19 06:45:22

标签: java mysql querydsl

我有两个表PetPOST
POST中,我在PetUser表之间建立了联系。
用户可以将Pet标记为收藏,并将在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:假id:77媒体:“s3.us-east-2.amazonaws.com/s3-petquest-dev/images/…” ownerId:7 petName:“测试新” petStatus:空价格:123},{fav:假fromOtherSource:假id:77媒体:“s3.us-east-2.amazonaws.com/s3-petquest-dev/images/…” ownerId:7 petName:“测试新” petStatus:空值:123}]

0 个答案:

没有答案