Java 分页时出错,但列表工作正常

Java 分页时出错,但列表工作正常,java,spring-boot,spring-data-jpa,pagination,Java,Spring Boot,Spring Data Jpa,Pagination,我正在从事一个有两个实体的项目:学生和教师。 它遵循@manytone关系。一个老师可以有多个学生。我在执行这个项目时遇到了一些困难 Pageable page=PageRequest.of(页码、大小) 您需要打印完整的stacktrace以检查错误:计数查询验证失败 您需要在方法“findByStudent”中定义“countQuery”。有关详细信息,请查看此链接: Spring framework无法创建对象,因为方法定义(注释)错误 背后的技术: Spring framework将使用

我正在从事一个有两个实体的项目:学生和教师。 它遵循@manytone关系。一个老师可以有多个学生。我在执行这个项目时遇到了一些困难

Pageable page=PageRequest.of(页码、大小)


您需要打印完整的stacktrace以检查错误:计数查询验证失败

您需要在方法“findByStudent”中定义“countQuery”。有关详细信息,请查看此链接:

Spring framework无法创建对象,因为方法定义(注释)错误

背后的技术:
Spring framework将使用“countQuery”注释(HQL)生成“原始SQL”(SQL),如果缺少此信息,则Spring framework不知道如何计算数据。

将StackTraceefer添加到此链接,更改SQL可能有帮助:已选中,没有帮助。问题是为什么它在使用分页时给出错误,而在使用列表时没有给出错误?我有一个建议,您可以将SQL修改为下面的简单SQL进行测试吗?让我们一起测试,一步一步找到根本原因:从TeacherEntity SDS中选择s。你是说这个简单的查询有效,但你的原始查询无效吗?equals hashcode在TeacherEntity上被重写了吗?@SKumar你能告诉我这里的hashcode是什么意思吗?那么你重写了equals方法而不是hashcode方法了吗?你能把你的老师贴到这个问题上吗?我认为这没有问题。因为当我不使用分页和使用列表时,代码工作得非常好。如果您没有重写这两个方法,那么就可以了。否则,如果您没有正确定义它们,那么这可能是一个问题。分页将需要找到x个数量的记录,这些记录依赖于这些方法。在该列表场景中,您是否获得了正确的记录数?
@Query(value = "SELECT s FROM TeacherEntity s JOIN FETCH s.student d WHERE s.student IN (:students) and s.deleted = false" +
            " ORDER BY s.createdAt DESC")
Page<TeacherEntity> findByStudent(@Param("students") Collection<StudentEntity> students, Pageable pageable);
@Query(value = "SELECT s FROM TeacherEntity s JOIN FETCH s.student d WHERE s.student IN (:students) and s.deleted = false" +
            " ORDER BY s.createdAt DESC")
List<TeacherEntity> findByStudentIn(@Param("students") 
Collection<StudentEntity> student); 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'teacherRepository': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: Count query validation failed for method public abstract org.springframework.data.domain.Page com.pro.aks.repository.TeacherRepository.findByStudent(java.util.Collection,org.springframework.data.domain.Pageable)!
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:176) ~[spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:101) ~[spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1827) ~[spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getObjectForBeanInstance(AbstractAutowireCapableBeanFactory.java:1265) ~[spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:334) ~[spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:624) ~[spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:612) ~[spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.data.repository.config.DeferredRepositoryInitializationListener.onApplicationEvent(DeferredRepositoryInitializationListener.java:51) ~[spring-data-commons-2.3.2.RELEASE.jar:2.3.2.RELEASE]
    at org.springframework.data.repository.config.DeferredRepositoryInitializationListener.onApplicationEvent(DeferredRepositoryInitializationListener.java:36) ~[spring-data-commons-2.3.2.RELEASE.jar:2.3.2.RELEASE]