@ManyToMany JPA 2复杂查询

我有以下ManyToMany映射。

@Entity

public class Class1 {

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private Long id;

@ManyToMany(fetch = FetchType.LAZY)

@JoinTable(name = "class1_class2", joinColumns = @JoinColumn(name = "class1Id"), inverseJoinColumns = @JoinColumn(name = "class2Id"))

private List<Class2> class2;

}

@Entity

public class Class2 {

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private Long id;

}

我想检索与Classe2实体有关系的所有Class1实体,其中class2Id = 1和class2Id = 2和class2Id = 3。{1,2,3}

或者,要过滤在其class2列表上具有的Classe1实体,请使用具有以下值的Class2实体:class2Id = 1和class2Id =

2和class2Id = 3

例如:

如果在联接表上,我有以下值。

class1Id   class2Id

1 1

1 2

1 3

1 4

6 1

6 2

6 3

4 1

5 2

对于该示例,结果将是Class1Id为1和6的Class1。因为Class1Id =

1的Class1实体的classe2Id为1,2,3,4,Class1Id = 2的Class1实体的classe2Id为1。 ,2,3

是否可以通过JPA2(谓词)获得正确的实体?

有没有更好的映射来处理这种情况?

目前,我提出了以下SQL查询:

select v1.class1Id from class1_class2 v1

inner join class1_class2 v2 on v1.class1Id=v2.class1Id

inner join class1_class2 v3 on v2.class1Id=v3.class1Id

where v1.classe2Id=1 and v2.classe2Id=2 and v3.classe2Id=3;

回答:

这是可以提供帮助的查询:

select c1 

from Class1 c1

join c1.class2 c2

where c2.id in (1,2,3)

group by c1

having count(c1)=3 ;

以上是 @ManyToMany JPA 2复杂查询 的全部内容, 来源链接: utcz.com/qa/413555.html

回到顶部