鉴于我们具有以下形成多对多关系的实体:
@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
条件的查询。由于关系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
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
中编写此查询?鉴于我们具有以下形成多对多关系的实体:@Entity public class A {@Id private long id;私有字符串名称; @ManyToMany(fetch = FetchType.LAZY,...
您应该尝试交叉加入