【发布时间】:2020-07-05 02:06:49
【问题描述】:
我正在尝试按范围计算记录数,但在运行服务时出现错误:
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found '<' near line 1, column 58 [SELECT new net.BBB.ProjectB.entity.AgeCount(COUNT(s.edad < 15 OR NULL), COUNT(s.edad < 25 AND s.edad > 16 OR NULL), COUNT(s.edad < 35 AND s.edad > 26 OR NULL), COUNT(s.edad < 45 AND s.edad > 36 OR NULL), COUNT(s.edad > 46 OR NULL),FROM net.BBB.ProjectB.entity.Student AS s) ]
当我在数据库中执行查询时,它运行良好。我的存储库的代码是
package net.BBB.ProjectB.repository;
import java.util.List;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import net.BBB.ProjectB.entity.AgeCount;
import net.BBB.ProjectB.entity.NacionalityCount;
import net.BBB.ProjectB.entity.Student;
@Repository
public interface StudentRepository extends CrudRepository<Student, Long> {
List<Student> findByNombre(String nombre);
@Query(value = "SELECT new net.BBB.ProjectB.entity.NacionalityCount(COUNT(s.nacionalidad), s.nacionalidad) "
+ "FROM Student AS s GROUP BY s.nacionalidad")
List<NacionalityCount> countByNacionalidad();
@Query(value = "SELECT new net.BBB.ProjectB.entity.AgeCount(COUNT(s.edad < 15 OR NULL), "
+ "COUNT(s.edad < 25 AND s.edad > 16 OR NULL), COUNT(s.edad < 35 AND s.edad > 26 OR NULL), "
+ "COUNT(s.edad < 45 AND s.edad > 36 OR NULL), COUNT(s.edad > 46 OR NULL),"
+ "FROM Student AS s) ")
List<AgeCount> countByAge();
}
第一个查询工作正常,第二个是问题。以防万一,实体的名称是 Student,它有一个名为“edad”的属性,我试图按范围计数。我已经尝试过其他适用于数据库的查询,例如:
SELECT COUNT(s.edad BETWEEN 0 AND 16 OR NULL),
COUNT(s.edad BETWEEN 17 AND 25 OR NULL),
COUNT(s.edad BETWEEN 26 AND 35 OR NULL),
COUNT(s.edad BETWEEN 35 AND 45 OR NULL)
FROM students AS s;
显然带有实体的名称。我不知道是否有办法让它发挥作用。
【问题讨论】:
标签: spring spring-boot spring-mvc spring-data-jpa