【问题标题】:How to return a list of custom mode from a custom query created using @query如何从使用 @query 创建的自定义查询中返回自定义模式列表
【发布时间】:2016-11-02 16:35:48
【问题描述】:

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

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

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

我该如何解决这个问题?

【问题讨论】:

标签: spring spring-boot spring-data


【解决方案1】:

你在尝试@Query(value=&lt;quite-complex-query&gt;, nativeQuery=true) List&lt;MyCustomType&gt; myCustomRepoMethod();

【讨论】:

  • 当然,我也试过了,但它给了我从[Object[]][MyCustomType]的转换错误。
  • 我正在寻找问题的原因
  • 可能问题出在查询中..你能把它说出来吗??
  • 它不在查询中,它成功返回了我正在查询的内容。问题是查询不知道MyCustomType
【解决方案2】:

您可以使用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)
                    }
          )
       }
      )

【讨论】:

  • 能否请您在 Spring JPA 存储库的上下文中给出一个示例,它们是接口..
  • @SqlResultSetMapping 位放入您的实体类中。把SQL作为@Query annotation的值。
  • @AlanHay 是的,但是在上面的查询中,我们有第二个参数CustomerDetailsResult...
  • 参见此处:stackoverflow.com/questions/29082749/… 将其设为命名查询并从您的存储库中引用它。
  • @AlanHay 显然我应该在我想要返回的实体的类上方指定@NamedNativeQuery,对吧?我做到了,我还为我想从初始查询返回的实体创建了一个专用存储库,我将返回我的实体的方法放在那里。现在我遇到了问题:Unsatisfied dependency expressed through field 'repoVariableAutowired'.
猜你喜欢
  • 2019-06-05
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 2019-04-06
  • 2017-10-25
  • 1970-01-01
相关资源
最近更新 更多