我有以下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

对于此示例,结果将是Class1,class1Id为1和6。
因为Class1实体(class1Id = 1)与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 ;

09-10 12:53