【问题标题】:Not able to get array object response in @Query annotation in Spring无法在 Spring 的 @Query 注释中获取数组对象响应
【发布时间】:2019-04-08 16:25:55
【问题描述】:

我的仓库

@Repository
public interface TestNativeQRepository extends CrudRepository<TestNativeQ, String> {

    @Query( value="SELECT qplt.name price_list_name,  qplab.status_code, qplab.start_date, (SELECT charge_definition_code FROM oalfsaas_repl.QP_CHARGE_DEFINITIONS_B WHERE charge_definition_id=qplab.charge_definition_id  ) chargedefinitioncode "
                + "FROM  pricelistsall qplab, PRICELISTSTL qplt "
                + " WHERE qplab.price_list_id  =qplt.price_list_id ", nativeQuery = false)
    public List<TestNativeQDTO> getAllDetails();
}

实际结果:

[{"ABC", "DEF", "15/05/2018", "XXZ"}]

预期结果

[{name: "ABC", statuscode: "DEF", startDate: "15/05/2018", chargedefintioncode: "XXZ"}]

【问题讨论】:

  • 原生查询的结果不会自动转换为Entity,必须手动转换或通过@SqlResultSetMapping@ColumnResult定义映射。有关详细信息,请参阅此问题stackoverflow.com/questions/13012584/…
  • @NikolayShevchenko 感谢您的纠正
  • 您好,感谢您的回答。如果 nativeQuery = false 并且列来自 2 个以上的表怎么办

标签: spring-boot spring-data-jpa dto jsonresult nativequery


【解决方案1】:

正如@Nikolay 在评论中给出的提示。

原生查询的结果不会自动转化为Entity,必须手动或者通过@SqlResultSetMapping和@ColumnResult定义映射。

按照下面的代码进行这项工作。

@Entity
@Configurable
@SqlResultSetMapping(name = "someName", entities = @EntityResult(entityClass = SamplePojo.class), columns = @ColumnResult(name = "columnName"))
public class SamplePojo{
//fields and getters/setters
}

然后在查询中

List<SamplePojo> list = entityManager().createNativeQuery("Select ......", "someName").getResultList();

注意:someName 在两个地方应该相同。

参考this-question

【讨论】:

  • 嗨,有没有尊重它的博客?
  • 我的提示与在以 @Query 表示的 repo 方法中使用本机查询有关。如果您直接使用 EntityManager,那么以下内容就足够了:List&lt;SamplePojo&gt; list = entityManager().createNativeQuery("Select ......", SamplePojo.class).getResultList();(没有额外的映射)
猜你喜欢
  • 2019-04-09
  • 1970-01-01
  • 2019-03-25
  • 2018-08-31
  • 2019-10-07
  • 2015-05-30
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
相关资源
最近更新 更多