当前位置: 首页 > 知识库问答 >
问题:

QueryDsl-对关联实体的多个字段进行JPA查询

夹谷英杰
2023-03-14

  • Hibernate5.2.10
  • 查询DSL(jpa,apt)4.1.4
  • Spring Boot 1.5.6
  • Spring Data JPA(因此,使用存储库)
  • 存储库扩展QuerydsLPredicateExecutor

选择以下meetupCampaign.id=x
*meetupCampaign.ApprovalStatus=y的关联会议:
*meetupCampaign.id=x
*meetupCampaign.ApprovalStatus=y

我可以在任何一个条件为真的情况下得到结果,但不能同时过滤两个条件

我不确定是使用MeetupRepository还是使用MeetupCampaignRepository

meetupCampaign.approvalStatus.eq(approvalStatus).and(meetupCampaign.campaign.id.eq(campaignId));
meetup.meetupCampaigns.any().campaign.id.eq(campaignId).and(meetup.meetupCampaigns.any().approvalStatus.eq(approvalStatus));

在本例中,我将得到任何meetupcampaign其中任何一个条件都为true。

<!-- Should be selected -->
    <meetup_campaign id="600" meetup_id="500" campaign_id="200" approval_status="ACCEPTED"/>
    <meetup_campaign id="605" meetup_id="504" campaign_id="200" approval_status="ACCEPTED"/>
<!-- Rejected because meetupCampaign status declined -->
    <meetup_campaign id="601" meetup_id="501" campaign_id="200" approval_status="DECLINED"/>
<!-- Rejected because wrong campaign id -->
    <meetup_campaign id="602" meetup_id="500" campaign_id="201" approval_status="ACCEPTED"/>
    <meetup_campaign id="606" meetup_id="501" campaign_id="201" approval_status="ACCEPTED"/>
    <meetup_campaign id="603" meetup_id="502" campaign_id="201" approval_status="ACCEPTED"/>
<!-- Rejected on both counts -->
    <meetup_campaign id="604" meetup_id="503" campaign_id="201" approval_status="DECLINED"/>
@Entity
public class Meetup {

    @Id
    @Column(nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO)
    protected Long id;

    @Fetch(FetchMode.SELECT)
    @RestResource(exported = false)
    @OneToMany(mappedBy = "meetup", fetch = FetchType.EAGER, orphanRemoval = true)
    private Set<MeetupCampaign> meetupCampaigns = new HashSet<>();

}

@Entity
public class MeetupCampaign {

    @Id
    @Column(nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO)
    protected Long id;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(nullable = false, updatable = false)
    private Campaign campaign;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(nullable = false, updatable = false)
    private Meetup meetup;

    @Enumerated(EnumType.STRING)
    private ApprovalStatus approvalStatus;

}

@Entity
public class Campaign {

    @Id
    @Column(nullable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.AUTO)
    protected Long id;

}

共有1个答案

文自怡
2023-03-14

在这里找到了一个答案:querydsl-subquery in collection expression

您可以使用子查询表达式查找具有这两个属性的所有MeetupCampaigns,然后使用SimpleExpression.in()查找与这些MeetupCampaigns相关的Meetup

前夫。

meetup.in(JPAExpressions.select(meetupCampaign.meetup).from(meetupCampaign).where(meetupCampaign.campaign.id.eq(campaignId).and(meetupCampaign.approvalStatus.eq(status))).fetchAll());
 类似资料:
  • 如何为这种多对多关系分配默认值?制作两个关联表->一个用于收件箱-关系,另一个用于发件箱-关系会更好吗?我该如何做到这一点?这个问题的其他解决方案? 任何帮助都非常感谢--非常感谢!

  • 问题内容: 我正在写一个跨三个表的JPQL查询。在我的结果列表中,我想获得每个匹配行的所有三个实体(希望如此)。 有任何想法吗? Hibernate 3.x是我的JPA提供程序。 问题答案: IIRC,您可以执行,结果将是,其中数组内容将包含o1,o2,o3值。

  • null 扩展 的 的web查询 只返回具有指定键和值的属性条目的Meetups:AKEY=AVALUE。 收集字段工作,如参与者: 但不是这个地图字段。 我尝试通过使用存储库来定制绑定 编辑:见上文;事实证明,这对我的代码没有任何帮助。 要求尝试两种方法返回路径,以便生成可以使用的谓词。 1是在自定义绑定中查找。我看不到任何表达地图查询的方法 2默认为Spring的bean路径。同样的表达问题。

  • 问题内容: 给定 Spring Data JPA,Spring Data Rest,QueryDsl 一个实体 有田野 坚持作为一个表 一个 延伸 我希望 网络查询 仅返回具有指定键和值的属性条目的Meetups:aKey = aValue。 但是,这对我不起作用。我想念什么? 试过了 简单字段 简单的字段可以工作,例如名称和描述: 收集字段像参与者一样工作: 但不是此Map字段。 自定义Quer

  • 问题内容: 我有一对多关系中的两个客户实体和订单实体。对于每个客户,我需要计算关联订单的数量,并按此数量对结果进行排序。在本地postgres查询中,它看起来像这样: 但是我必须使用CriteriaBuilder来执行此操作,因为此查询是使用CriteriaBuilder放入其他条件的较大代码段的一部分。在Hibernate中,我可能会使用Projections,但在JPA中找不到类似的东西。 使

  • 我在谷歌周围看了一段时间,但没有工作。有谁能帮我解决这个问题吗?