Я пытаюсь подсчитать количество записей по диапазонам, но я получаю сообщение об ошибке при запуске службы:
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;
Очевидно, с именем объекта. Я понятия не имею, есть ли способ заставить это работать.