QueryDsl反转manyToMany连接

问题描述 投票:1回答:1

鉴于我们具有以下形成多对多关系的实体:

@Entity
public class A {

    @Id
    private Long id;

    private String name;

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(
        name = "A_B",
        joinColumns = @JoinColumn(name = "id_a"),
        inverseJoinColumns = @JoinColumn(name = "id_b"))
    private Set<B> listing;
}

@Entity
public class B {

    @Id
    private Long id;

}

enter image description here我需要编写一个获取B并在A端应用一些WHERE条件的查询。由于关系ip是从A实体方面建模的,因此编写连接自身的查询非常容易:

new JPAQuery<>(entityManager)
    .select(QB.b)
    .from(QA.a)
    .join(QA.a.listing,b)
    .where(QA.a.name.eq("test"))
    .fetch();

但是由于可以复制A_B表,因此该查询可以产生重复的条目,这对我的情况不起作用。因此,我需要启动FROM BJOIN A。这就是我需要帮助的地方。我尝试过:

new JPAQuery<>(entityManager)
    .select(QB.b)
    .from(QB.b)
    .join(QA.a).on(QA.a.listing.any().eq(QB.b))
    .where(QA.a.name.eq("test"))
    .fetch();

但是那不起作用,因为any()仅产生一个子选择,而不是多对多联接。

如何在Querydsl

中编写此查询?

鉴于我们具有以下形成多对多关系的实体:@Entity public class A {@Id private long id;私有字符串名称; @ManyToMany(fetch = FetchType.LAZY,...

java spring jpa querydsl
1个回答
0
投票

您应该尝试交叉加入

© www.soinside.com 2019 - 2024. All rights reserved.