如何从使用@query创建的自定义查询返回自定义模式列表

时间:2016-11-02 16:35:48

标签: spring spring-boot spring-data

我有一个JPA DATA存储库,其中包含某种自定义方法,例如:

@Query(value=<quite-complex-query>, nativeQuery=true)
List<Object> myCustomRepoMethod();

现在的问题是我要返回List<Object>,而我想返回MyCustomType的列表,但它无效,因为查询返回了几列显然无法映射到MyCustomType的字段。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您是否正在尝试使用@Query(value=<quite-complex-query>, nativeQuery=true) List<MyCustomType> myCustomRepoMethod();

答案 1 :(得分:0)

您可以使用SqlResultSetMappingConstructorResult来实现您的目标。

这是如何将SQL结果集映射到POJO的示例:

   Query q = em.createNativeQuery(
      "SELECT c.id, c.name, COUNT(o) as orderCount, AVG(o.price) AS avgOrder " +
      "FROM Customer c, Orders o " +
      "WHERE o.cid = c.id " +
      "GROUP BY c.id, c.name",
      "CustomerDetailsResult");

   @SqlResultSetMapping(
       name="CustomerDetailsResult",
       classes={
          @ConstructorResult(
               targetClass=com.acme.CustomerDetails.class,
                 columns={
                    @ColumnResult(name="id"),
                    @ColumnResult(name="name"),
                    @ColumnResult(name="orderCount"),
                    @ColumnResult(name="avgOrder", type=Double.class)
                    }
          )
       }
      )