Spring Data JPA에서 JpaRepository를 extends 해줄때 선언해준 객체를 준수하지 않고 Integer 타입을 반환하려고 했을때 해당 오류가 발생했다.
문제의 코드
package com.playdata.eungae.appointment.repository;
import java.util.List;
import java.util.Optional;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import com.playdata.eungae.appointment.domain.Appointment;
import com.playdata.eungae.member.domain.Member;
@Repository
public interface AppointmentRepository extends JpaRepository<Appointment, Long> {
@Query("select count(a)"
+ " from Appointment a"
+ " join fetch a.hospital h"
+ " where a.hospital.hospitalSeq = :memberSeq")
Integer count(Pageable pageConfig, @Param("memberSeq") Long memberSeq);
}
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'appointmentRepository' defined in com.playdata.eungae.appointment.repository.AppointmentRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract java.lang.Integer com.playdata.eungae.appointment.repository.AppointmentRepository.count(org.springframework.data.domain.Pageable,java.lang.Long); Reason: Method has to have one of the following return types [interface org.springframework.data.domain.Slice, interface org.springframework.data.domain.Window, interface org.springframework.data.domain.Page, interface java.util.List]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770) ~[spring-beans-6.0.13.jar:6.0.13]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598) ~[spring-beans-6.0.13.jar:6.0.13]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[spring-beans-6.0.13.jar:6.0.13]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.0.13.jar:6.0.13]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.13.jar:6.0.13]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.0.13.jar:6.0.13]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.0.13.jar:6.0.13]
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[spring-beans-6.0.13.jar:6.0.13]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417) ~[spring-beans-6.0.13.jar:6.0.13]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337) ~[spring-beans-6.0.13.jar:6.0.13]
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:910) ~[spring-beans-6.0.13.jar:6.0.13]
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788) ~[spring-beans-6.0.13.jar:6.0.13]
... 38 common frames omitted
Caused by: org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract java.lang.Integer com.playdata.eungae.appointment.repository.AppointmentRepository.count(org.springframework.data.domain.Pageable,java.lang.Long); Reason: Method has to have one of the following return types [interface org.springframework.data.domain.Slice, interface org.springframework.data.domain.Window, interface org.springframework.data.domain.Page, interface java.util.List]
at org.springframework.data.repository.query.QueryCreationException.create(QueryCreationException.java:101) ~[spring-data-commons-3.1.5.jar:3.1.5]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lookupQuery(QueryExecutorMethodInterceptor.java:115) ~[spring-data-commons-3.1.5.jar:3.1.5]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.mapMethodsToQuery(QueryExecutorMethodInterceptor.java:99) ~[spring-data-commons-3.1.5.jar:3.1.5]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lambda$new$0(QueryExecutorMethodInterceptor.java:88) ~[spring-data-commons-3.1.5.jar:3.1.5]
at java.base/java.util.Optional.map(Optional.java:260) ~[na:na]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.<init>(QueryExecutorMethodInterceptor.java:88) ~[spring-data-commons-3.1.5.jar:3.1.5]
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:357) ~[spring-data-commons-3.1.5.jar:3.1.5]
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$5(RepositoryFactoryBeanSupport.java:279) ~[spring-data-commons-3.1.5.jar:3.1.5]
at org.springframework.data.util.Lazy.getNullable(Lazy.java:245) ~[spring-data-commons-3.1.5.jar:3.1.5]
at org.springframework.data.util.Lazy.get(Lazy.java:114) ~[spring-data-commons-3.1.5.jar:3.1.5]
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:285) ~[spring-data-commons-3.1.5.jar:3.1.5]
at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:132) ~[spring-data-jpa-3.1.5.jar:3.1.5]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1817) ~[spring-beans-6.0.13.jar:6.0.13]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1766) ~[spring-beans-6.0.13.jar:6.0.13]
... 49 common frames omitted
JpaRepository를 선언할때 작성해놨던 return 타입을 준수하자
package com.playdata.eungae.appointment.repository;
import java.util.List;
import java.util.Optional;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import com.playdata.eungae.appointment.domain.Appointment;
import com.playdata.eungae.member.domain.Member;
@Repository
public interface AppointmentRepository extends JpaRepository<Appointment, Long> {
@Query("select count(a)"
+ " from Appointment a"
+ " join fetch a.hospital h"
+ " where a.hospital.hospitalSeq = :memberSeq")
Optional<Page<Appointment>> count(Pageable pageConfig, @Param("memberSeq") Long memberSeq);
}
'코딩딩 > Error' 카테고리의 다른 글
RestController에서 @AuthenticationPrincipal UserDetails principal 정보가 담기지 않은 문제 (0) | 2024.01.12 |
---|---|
Thymeleaf 사용시 redirect가 동작하지 않는 오류 (1) | 2024.01.10 |
파이썬 셀레니움 웹 스크레핑 시 hidden에 숨겨져있는 src 경로 가져오기 (3) | 2024.01.08 |
OneToOne 양방향 관계 지연로딩 안먹히는 문제 해결법 (0) | 2024.01.05 |
OneToOne 관계에서 N+1 문제가 발생하는 이유 (2) | 2024.01.04 |