鉴于我们具有以下形成多对多关系的实体:
@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;
}
我需要编写一个查询,该查询获取 B 并在 A 端应用一些WHERE
条件。
由于关联是从 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
B
和JOIN
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 中编写此查询?