次の 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;
}
class2Id = 1 および class2Id =2 および class2Id =3 で、Classe2 エンティティと関係があるすべての Class1 エンティティを取得したいと考えています。{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;