【问题标题】:How do I Return SUM from JPA Query Using Hibernate and Spring-boot?如何使用 Hibernate 和 Spring-boot 从 JPA 查询中返回 SUM?
【发布时间】:2019-01-09 06:00:33
【问题描述】:

我正在尝试使用 JPA 和 JPQL 来查询我的实体并从表中返回列的总和(总天数)。我以为我设置正确,但出现此错误:

Caused by: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'myRepository':
Invocation of init method failed; nested exception is
java.lang.IllegalArgumentException: Validation failed for query for method
public abstract java.lang.Float
com.nissan.rca.repository.MyRepository.selectTotals()!

这是我的实体的表示:

@Entity
@Table(name = "TABLENAME")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class MyEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    private MyEntityCompositeKey myEntityCompositeKey;

    @Column(name = "raiser_id")
    private String raiserID;

    @Column(name = "total_days")
    private Float totalDays;

这是我将查询分配给方法的存储库:

@Repository
public interface MyRepository extends JpaRepository<MyEntity, ID> {
    @Query("SELECT SUM(total_days) FROM MyEntity")
    Float selectTotals();
}

我从我的 rest 控制器中的 myRepository 对象调用 selectTotals() 方法以进行 api 映射。

@GetMapping("/getForecastTotals")
public Float getForecastTotals() {
    return myRepository.selectTotals();
}

我不确定为什么它不能作为浮点数返回。

【问题讨论】:

  • 在您的查询中,您使用的是列名,使用属性名 (totalDays),这应该可以正常工作。

标签: java spring jpa jpql


【解决方案1】:

这不是有效的 JPQL。

你应该有:

@Query("SELECT SUM(m.totalDays) FROM MyEntity m")

或者,让它成为原生的:

@Query(value = "SELECT SUM(total_days) FROM MyEntity", nativeQuery = true)

【讨论】:

    【解决方案2】:

    你可以通过映射一个新的 POJO 来做到这一点

    @Repository
    public interface MyRepository extends JpaRepository<MyEntity, ID> {
        @Query("SELECT new com.NewPojo(SUM(m.totalDays)) FROM MyEntity m")
        NewPojo selectTotals();
    }
    
    class NewPojo {
        Float days;
        public NewPojo(Float days) {
            this.days = days;
        }
    }
    

    【讨论】:

    • 当我一直在为我的 DTO 寻找解决方案时,这个解决方案帮助了我。 new com.myDTO(recipientName, SUM(p.price))...
    【解决方案3】:

    将您的 JPQL 更改为 @Query("SELECT SUM(m.totalDays) FROM MyEntity m")

    【讨论】:

      猜你喜欢
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 2018-10-02
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 2016-12-19
      相关资源
      最近更新 更多