mysql - 无法使用 Spring Data JPA 执行聚合函数并获取结果
问题描述
我正在尝试对特定日期执行聚合操作。请在下面找到相同的查询。
@Modifying
@Query("SELECT new AggregateJourneyFoodOrder(mealRetrievalTime, SUM(head_count), SUM(bread), SUM(achar), SUM(jam) ,SUM(others), SUM(puri), SUM(roti), SUM(thepla))"
+ " FROM JourneyFoodOrder WHERE isRemoved=false AND mealRetrievalTime = :mealRetrievalDate")
List<AggregateJourneyFoodOrder> getOrdersByDateAndNotDisabled(Boolean isRemoved, Date mealRetrievalDate);
我得到以下例外
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'adminController': Unsatisfied dependency expressed through field 'journeyFoodServiceImpl'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'journeyFoodServiceImpl' defined in file [C:\Users\TiaaUser\Desktop\AWS\journeyfood\target\classes\org\brahmakumaris\journeyfood\service\JourneyFoodServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'journeyFoodOrderRepository' defined in org.brahmakumaris.journeyfood.repository.JourneyFoodOrderRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Using named parameters for method public abstract java.util.List org.brahmakumaris.journeyfood.repository.JourneyFoodOrderRepository.getOrdersByDateAndNotDisabled(java.lang.Boolean,java.util.Date) but parameter 'Optional[isRemoved]' not found in annotated query 'SELECT new AggregateJourneyFoodOrder(SUM(head_count), SUM(bread), SUM(achar), SUM(jam) ,SUM(others), SUM(puri), SUM(roti), SUM(thepla)) FROM JourneyFoodOrder WHERE isRemoved=false AND mealRetrievalTime = :mealRetrievalDate'!
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'journeyFoodServiceImpl' defined in file [C:\Users\TiaaUser\Desktop\AWS\journeyfood\target\classes\org\brahmakumaris\journeyfood\service\JourneyFoodServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'journeyFoodOrderRepository' defined in org.brahmakumaris.journeyfood.repository.JourneyFoodOrderRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Using named parameters for method public abstract java.util.List org.brahmakumaris.journeyfood.repository.JourneyFoodOrderRepository.getOrdersByDateAndNotDisabled(java.lang.Boolean,java.util.Date) but parameter 'Optional[isRemoved]' not found in annotated query 'SELECT new AggregateJourneyFoodOrder(SUM(head_count), SUM(bread), SUM(achar), SUM(jam) ,SUM(others), SUM(puri), SUM(roti), SUM(thepla)) FROM JourneyFoodOrder WHERE isRemoved=false AND mealRetrievalTime = :mealRetrievalDate'!
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'journeyFoodOrderRepository' defined in org.brahmakumaris.journeyfood.repository.JourneyFoodOrderRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Using named parameters for method public abstract java.util.List org.brahmakumaris.journeyfood.repository.JourneyFoodOrderRepository.getOrdersByDateAndNotDisabled(java.lang.Boolean,java.util.Date) but parameter 'Optional[isRemoved]' not found in annotated query 'SELECT new AggregateJourneyFoodOrder(SUM(head_count), SUM(bread), SUM(achar), SUM(jam) ,SUM(others), SUM(puri), SUM(roti), SUM(thepla)) FROM JourneyFoodOrder WHERE isRemoved=false AND mealRetrievalTime = :mealRetrievalDate'!
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602)
Caused by: java.lang.IllegalStateException: Using named parameters for method public abstract java.util.List org.brahmakumaris.journeyfood.repository.JourneyFoodOrderRepository.getOrdersByDateAndNotDisabled(java.lang.Boolean,java.util.Date) but parameter 'Optional[isRemoved]' not found in annotated query 'SELECT new AggregateJourneyFoodOrder(SUM(head_count), SUM(bread), SUM(achar), SUM(jam) ,SUM(others), SUM(puri), SUM(roti), SUM(thepla)) FROM JourneyFoodOrder WHERE isRemoved=false AND mealRetrievalTime = :mealRetrievalDate'!
at org.springframework.data.jpa.repository.query.JpaQueryMethod.assertParameterNamesInAnnotatedQuery(JpaQueryMethod.java:172)
at org.springframework.data.jpa.repository.query.JpaQueryMethod.<init>(JpaQueryMethod.java:139)
AggregateJourneyFoodOrder.java
public class AggregateJourneyFoodOrder {
private int totalHeadCount;
private int totalBread;
private int totalAchar;
private int totalJam;
private int totalOthers;
private int totalPuri;
private int totalRoti;
private int totalThepla;
private Date mealRetrievalDate;
//Getter Setters and Constructors
}
JourneyFoodOrder.java
@Entity
public class JourneyFoodOrder{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long orderId;
private Integer headCount;
@DateTimeFormat(pattern = "dd/MM/yyyy")
private Date dateOfOrderPlaced;
@DateTimeFormat(pattern = "dd/MM/yyyy")
private Date dateOfDeparture;
@DateTimeFormat(pattern = "dd/MM/yyyy h:mm a")
private Date mealRetrievalTime;
@ManyToOne
private UserEntity user;
private Integer thepla;
private Integer puri;
private Integer roti;
private Integer achar;
private Integer jam;
private Integer bread;
private Integer others;
private Boolean isRemoved;
//Getters and setters
}
我没有得到我到底做错了什么。还建议是否查询如何对特定日期执行聚合操作。
解决方案
我认为这与聚合函数没有任何关系,而是与您尝试将LIKE
运算符(和通配符修饰符)应用于不起作用%
的类型参数有关。Date
由于我不确定该构造甚至应该意味着什么,因此我不能真正推荐其他替代方法:使用 aString
或不同的比较运算符,例如=
or >=
。
注意:@Modifying
注释似乎是错误的,因为这个查询是一个纯选择查询,应该这样执行。
推荐阅读
- python - 使用 pyinstaller 在 EXE 中找不到“os.path.isdir”
- reactjs - 如何在不同的组件中渲染分离的路线
- javascript - 自动从用户的浏览器获取用户的位置,而不是在 django 视图中硬编码来过滤最近的商店
- javascript - 何时使用动态导入和静态导入
- python - 这个点子问题有什么解决方案吗?
- direct3d12 - 为什么 D3D12 样本使用 WM_PAINT?
- php - Laravel Excel,验证导入在同一行中接受 2 个唯一数字
- javascript - iOS Safari Won't Refresh Javascript Content
- discord.js - Discord JS获取字段的文本和值
- c# - TCP异步套接字