具有自定义集合属性的 JPA 投影

Jos*_*e S 4 java jpa projection jpql spring-data-jpa

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

\n\n
    public interface ProfesionalRepository extends JpaRepository<Profesional, Long> {\n\n    @Query("SELECT p.id as idProfesional, " +\n            " p.name as name, " +\n            " p.surname as surname, " +\n            " (SELECT a.descripcionIlt FROM Ausencia a WHERE a.profesional.id = p.id) as exclusionesCenso " +\n            " FROM Profesional p ")\n    List<ProfesionalCensoProjection> findCenso();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

投影为:

\n\n
public interface ProfesionalCensoProjection {\n    Long getIdProfesional();\n    String getName();\n    String getSurname();\n    List<String> getExclusionesCenso();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我们收到这样的错误:

\n\n
Caused by: java.sql.SQLException: ORA-01427: single-row subquery\nreturns more than one row\n
Run Code Online (Sandbox Code Playgroud)\n\n

我们发现了其他帖子,例如:Spring JPA 投影可以有集合吗?

\n\n

但是我们找不到带有子查询的示例。\n如果 JPA 不允许\xc2\xb4t 允许,那么哪个是解决此问题的最佳解决方案?

\n\n

谢谢,

\n

Ala*_*Hay 5

您尚未发布这些实体,但 Professional 似乎与 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();
}
Run Code Online (Sandbox Code Playgroud)