如何使用 Hibernate 和 Spring-boot 从 JPA 查询返回 SUM?

新手上路,请多包涵

我正在尝试使用 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();
}

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

原文由 Benjamin Gowers 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

它不是有效的 JPQL。

你要么应该有:

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

或者,将其设为原生:

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

原文由 sedooe 发布,翻译遵循 CC BY-SA 4.0 许可协议

你可以通过映射一个新的 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;
    }
}

原文由 sendon1982 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏