JPQL查询,用于从一对一关系中选择实体,在该实体的相对对象中具有匹配特定条件的字段

问题描述 投票:0回答:1

我有三个实体:EntityA映射到table_aEntityB映射到table_b,并且Catalog映射到catalog。在数据库中,table_bcatalogb_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 ...

java sql hibernate plsql jpql
1个回答
0
投票

是,您可以使用类似的东西

© www.soinside.com 2019 - 2024. All rights reserved.