【问题标题】:Native query result not getting set correctly in projection class本机查询结果未在投影类中正确设置
【发布时间】:2022-01-18 14:29:37
【问题描述】:

我正在尝试将本机查询的结果放入投影中。 但是查询结果值似乎没有设置为投影对象中的正确字段。

我的原生查询是这样的:


@Query(value = "select p.siteId,"
        + " sum(case when p.arrivalDate = :date then 1 else 0 end) as arrivalTotal "
        + " sum(case when p.departureDate = :date then 1 else 0 end) as departureTotal "
        + " from product p "
        + " where p.collectionSite = :siteId"
        + " and (p.arrivalDate = :date or p.departureDate = :date", nativeQuery = true)
List<DeliverySummary> getDeliverySummary(@Param("siteId") String siteId,
        @Param("date") String date);

我的投影类是:


    public interface DeliverySummary {
        String getSiteId();
        String getArrivalTotal();
        String getDepartureTotal();
    }

结果将返回如下:

siteId = 5 (when actual is site1)
arrivalTotal = "site1" (when actual is 2)
departureTotal = 2 (when actual is 5)

我怀疑问题是因为投影对象中的字段不是表(和实体)的本机字段,它们是总和。有没有办法正确设置它? TIA

【问题讨论】:

  • 您是否也尝试为 siteId 添加别名(作为 siteId)?
  • @SimonMartinelli,是的。还尝试使用其他变量名称以及相应的投影类中的字段名称。但仍然没有将字段值设置为预期的字段。
  • 这听起来很奇怪。并且您 100% 确定查询返回正确的值?
  • @SimonMartinelli,是的。这些值是正确的,但它们的变量分配不正确。但我在这里找到了一个适合我的解决方案stackoverflow.com/questions/13012584/…

标签: jpa native jpql


【解决方案1】:

这里的解决方案对我有用: JPA : How to convert a native query result set to POJO class collection

JPA 2.1 和 @SqlResultSetMapping 部分

我之前曾尝试使用@SqlResultSetMapping,但我之前找到的解决方案需要一个新的@Entity 类,我们不能这样做,因为我们不应该仅为投影类创建一个新表。然后我在上面链接的解决方案中发现,您可以使用任何现有的@Entity 类,只需在其中添加@SqlResultSetMapping sn-ps,它就可以工作了!感谢@Edwin Dalorzo

【讨论】:

    猜你喜欢
    • 2011-08-01
    • 1970-01-01
    • 2019-09-26
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多