【问题标题】:JPA Projection with custom collection property具有自定义集合属性的 JPA 投影
【发布时间】:2019-10-03 12:26:32
【问题描述】:

我们正在使用 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

我们发现了其他帖子,例如:Can Spring JPA projections have Collections?

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

谢谢,

【问题讨论】:

    标签: java jpa spring-data-jpa jpql projection


    【解决方案1】:

    您尚未发布实体,但 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();
    }
    

    【讨论】:

      猜你喜欢
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      • 2021-08-08
      • 1970-01-01
      相关资源
      最近更新 更多