如何使用 Hibernate 和 Spring-boot 从 JPA 查询中 Return SUM?
How do I Return SUM from JPA Query Using Hibernate and Spring-boot?
我正在尝试使用 JPA 和 JPQL 来查询我的实体和 return 来自 table 的列(总天数)的总和。我以为我已经设置好了,但我收到了这个错误:
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();
}
我从我的休息控制器中的 myRepository 对象调用 selectTotals() 方法以进行 api 映射。
@GetMapping("/getForecastTotals")
public Float getForecastTotals() {
return myRepository.selectTotals();
}
我不确定为什么不能将其 return 编辑为浮点数。
这不是有效的 JPQL。
你要么应该:
@Query("SELECT SUM(m.totalDays) FROM MyEntity m")
或者,将其设为原生:
@Query(value = "SELECT SUM(total_days) FROM MyEntity", nativeQuery = true)
将您的 JPQL 更改为 @Query("SELECT SUM(m.totalDays) FROM MyEntity m")
你可以通过映射一个新的 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;
}
}
我正在尝试使用 JPA 和 JPQL 来查询我的实体和 return 来自 table 的列(总天数)的总和。我以为我已经设置好了,但我收到了这个错误:
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();
}
我从我的休息控制器中的 myRepository 对象调用 selectTotals() 方法以进行 api 映射。
@GetMapping("/getForecastTotals")
public Float getForecastTotals() {
return myRepository.selectTotals();
}
我不确定为什么不能将其 return 编辑为浮点数。
这不是有效的 JPQL。
你要么应该:
@Query("SELECT SUM(m.totalDays) FROM MyEntity m")
或者,将其设为原生:
@Query(value = "SELECT SUM(total_days) FROM MyEntity", nativeQuery = true)
将您的 JPQL 更改为 @Query("SELECT SUM(m.totalDays) FROM MyEntity m")
你可以通过映射一个新的 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;
}
}