JPQL在条款中使用多对多

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

我想知道是否有一种方法可以将本机查询转换为JPQL查询。

查询

public interface GraphJobRepository extends JpaRepository<GraphJob, Long> {

    @Query(value = "Select * From graph_job where id in (\n" +
            "    SELECT distinct g.graph_job_id\n" +
            "    FROM graph_job_role g\n" +
            "             INNER JOIN clover_role r ON g.clover_role_id = r.role_id\n" +
            "    WHERE r.role_name in (:roles))",
            nativeQuery = true)
    List<GraphJob> findGraphJobsByRoles(@Param("roles") List<String> roles);

}

CloverRole

@Data
@Entity
public class CloverRole {

    @Id
    @Column(name = "role_id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String roleName;
}

GraphJob

@Entity
public class GraphJob {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @JoinTable(name = "graph_job_role", joinColumns = {
            @JoinColumn(name = "graph_job_id")}, inverseJoinColumns = {
            @JoinColumn(name = "clover_role_id")})
    @ManyToMany
    private Collection<CloverRole> roles;

}

我尝试过的所有方法都无济于事,我确定是否要添加联接表实体才能使它正常工作,但是我想知道是否有人知道如何在不实际创建该实体的情况下做到这一点。

hibernate jpa spring-data-jpa jpql
1个回答
0
投票

您可以尝试member of运算符。参数必须为List<CloverRole>

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