2016-11-02 40 views
0

我已经包含了一定的定制方法的JPA数据仓库创建的,是这样的:如何返回从自定义查询自定义模式列表使用@query

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

现在的问题是,我m返回一个List<Object>,而是我想返回一个MyCustomType的列表,但它不起作用,因为查询正在返回一些显然无法映射到MyCustomType的字段的列。

我该如何解决这个问题?

+0

的可能的复制[春季数据JPA映射结果非实体POJO(http://stackoverflow.com/questions/29082749/spring-data-jpa-map-the-result-to-non-entity-pojo) –

回答

0

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

+0

当然,我也试过,但是它给了我一个来自'[Object []] '到'[MyCustomType]'。 – nbro

+0

查看此文档http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.at-query –

+0

我在寻找问题的原因 –

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) 
        } 
     ) 
     } 
    ) 
+0

您可以在Spring JPA存储库的上下文中给出一个示例,它是接口.. – nbro

+0

将'@ SqlResultSetMapping'位置于您的Entity类中。将SQL作为“@Query注释”的值。 –

+0

@AlanHay是的,但在上面的查询中,我们有作为第二个参数'CustomerDetailsResult' ... – nbro