JPA使用自定义集合属性进行投影

4

我们正在使用Spring Data,尝试创建一个包含子查询、结果投影具有数组和其他属性的自定义查询,我们的问题在于子查询数组。

    public interface ProfesionalRepository extends JpaRepository<Profesional, Long> {

    @Query("SELECT p.id as idProfesional, " +
            " p.name as name, " +
            " p.surname as surname, " +
            " (SELECT a.descripcionIlt FROM Ausencia a WHERE a.profesional.id = p.id) as exclusionesCenso " +
            " FROM Profesional p ")
    List<ProfesionalCensoProjection> findCenso();
}

投影的含义:

public interface ProfesionalCensoProjection {
    Long getIdProfesional();
    String getName();
    String getSurname();
    List<String> getExclusionesCenso();
}

我们会遇到像这样的错误:
Caused by: java.sql.SQLException: ORA-01427: single-row subquery
returns more than one row

我们发现其他类似的帖子: Spring JPA投影可以包含集合吗?
但是我们无法找到具有子查询的示例。如果JPA不允许,那么这个问题的最佳解决方案是什么?
谢谢。
1个回答

5
你还没有发布实体,不过似乎Profesional与Ausencia有关系。你可以使用嵌套投影:
 public interface ProfesionalCensoProjection {
    Long getIdProfesional();
    String getName();
    String getSurname();
    // returns a projection which would include only the description
    List<AusenciaSumaryprojection> getExclusionesCenso(); 
}

public interface ProfesionalRepository extends JpaRepository<Profesional, Long> {

    List<ProfesionalCensoProjection> findCenso();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接