我有三个实体:EntityA
映射到table_a
,EntityB
映射到table_b
,并且Catalog
映射到catalog
。在数据库中,table_b
和catalog
,b_catalog_xref
之间有一个多对多表。 EntityB
具有字段:Long aId
和字段:List<Catalog> catalogs
。 Catalog实体具有一个字段:String name
。给定EntityB的ID列表和代表目录名称的字符串,我需要检索所有出现的EntityA,其ID与EntityB的aId
的ID匹配,并且给定的目录名称与EntityB的一个目录的名称相匹配。] >
我已经通过常规SQL成功获取了正确的数据,但是我正在努力在JPQL中重新创建查询。这是SQL查询:
SQL:
SELECT * FROM table_a a WHERE a.table_a_id in ( SELECT b.table_a_id FROM table_b b INNER JOIN b_catalog_xref bcx ON bcx.table_b_id = b.table_b_id INNER JOIN catalog c ON c.catalog_id = bcx.catalog_id WHERE c.catalog_name = 'Example Catalog Name' );
Java:
@Entity @Table(name = "table_a") public class EntityA { @Id @Column(name = "table_a_id") private Long aId; ... }
@Entity @Table(name = "table_b") public class EntityA { @Id @Column(name = "table_b_id") private Long bId; @Column(name = "table_a_id") private Long aId; @OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH}) @JoinTable(name = "b_catalog_xref", joinColumns = {@JoinColumn(name = "table_b_id")}, inverseJoinColumns = {@JoinColumn(name = "catalog_id")}) @Fetch(FetchMode.SELECT) @OrderBy("name ASC") List<Catalog> catalogs ... }
@Entity @Table(name = "catalog") public class Catalog { @Id @Column(name = "catalog_id") private Long catalogId; @Column(name = "catalog_name") private String name; ... }
我有三个实体:EntityA映射到table_a,EntityB映射到table_b,Catalog映射到目录。在数据库中,在table_b和目录b_catalog_xref之间有一个多对多表。 EntityB ...
是,您可以使用类似的东西