Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- Algorithm
- 혼자 공부하는 C언어
- Graph
- JSON
- 윤성우의 열혈 자료구조
- Selection Sorting
- stream
- coding test
- 메모리구조
- 이것이 자바다
- list 컬렉션
- insertion sort
- C 언어 코딩 도장
- s
- buffer
- C programming
- 윤성우 열혈자료구조
- Stack
- 알기쉬운 알고리즘
- datastructure
- 이스케이프 문자
- Serialization
- ㅅ
- R
Archives
- Today
- Total
Engineering Note
[Error Handling] JPA 쿼리메서드 생성 오류 본문
에러메시지
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'authController' defined in file [/Users/kim/myroot/Study/project/rest-shop/shop-api/build/classes/java/main/com/shop/api/auth/AuthController.class]: Unsatisfied dependency expressed through constructor parameter 1: Error creating bean with name 'authService' defined in file [/Users/kim/myroot/Study/project/rest-shop/shop-core/build/classes/java/main/com/shop/core/auth/AuthService.class]: Unsatisfied dependency expressed through constructor parameter 1: Error creating bean with name 'refreshTokenRepository' defined in com.shop.domain.auth.RefreshTokenRepository defined in @EnableJpaRepositories declared on ShopApiApplication: Could not create query for public abstract java.util.Optional com.shop.domain.auth.RefreshTokenRepository.findByMemberId(java.lang.Long); Reason: Failed to create query for method public abstract java.util.Optional com.shop.domain.auth.RefreshTokenRepository.findByMemberId(java.lang.Long); Could not resolve attribute 'memberId' of 'com.shop.domain.auth.RefreshToken'
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:804) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:240) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1395) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1232) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:569) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:373) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1228) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1194) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1130) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:990) ~[spring-context-6.2.14.jar:6.2.14]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:627) ~[spring-context-6.2.14.jar:6.2.14]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.5.8.jar:3.5.8]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) ~[spring-boot-3.5.8.jar:3.5.8]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) ~[spring-boot-3.5.8.jar:3.5.8]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) ~[spring-boot-3.5.8.jar:3.5.8]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1361) ~[spring-boot-3.5.8.jar:3.5.8]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1350) ~[spring-boot-3.5.8.jar:3.5.8]
at com.shop.api.ShopApiApplication.main(ShopApiApplication.java:21) ~[main/:na]
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'authService' defined in file [/Users/kim/myroot/Study/project/rest-shop/shop-core/build/classes/java/main/com/shop/core/auth/AuthService.class]: Unsatisfied dependency expressed through constructor parameter 1: Error creating bean with name 'refreshTokenRepository' defined in com.shop.domain.auth.RefreshTokenRepository defined in @EnableJpaRepositories declared on ShopApiApplication: Could not create query for public abstract java.util.Optional com.shop.domain.auth.RefreshTokenRepository.findByMemberId(java.lang.Long); Reason: Failed to create query for method public abstract java.util.Optional com.shop.domain.auth.RefreshTokenRepository.findByMemberId(java.lang.Long); Could not resolve attribute 'memberId' of 'com.shop.domain.auth.RefreshToken'
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:804) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:240) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1395) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1232) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:569) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:373) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1708) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1653) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:913) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-6.2.14.jar:6.2.14]
... 21 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'refreshTokenRepository' defined in com.shop.domain.auth.RefreshTokenRepository defined in @EnableJpaRepositories declared on ShopApiApplication: Could not create query for public abstract java.util.Optional com.shop.domain.auth.RefreshTokenRepository.findByMemberId(java.lang.Long); Reason: Failed to create query for method public abstract java.util.Optional com.shop.domain.auth.RefreshTokenRepository.findByMemberId(java.lang.Long); Could not resolve attribute 'memberId' of 'com.shop.domain.auth.RefreshToken'
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1826) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:607) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:373) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1708) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1653) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:913) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-6.2.14.jar:6.2.14]
... 34 common frames omitted
Caused by: org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract java.util.Optional com.shop.domain.auth.RefreshTokenRepository.findByMemberId(java.lang.Long); Reason: Failed to create query for method public abstract java.util.Optional com.shop.domain.auth.RefreshTokenRepository.findByMemberId(java.lang.Long); Could not resolve attribute 'memberId' of 'com.shop.domain.auth.RefreshToken'
at org.springframework.data.repository.query.QueryCreationException.create(QueryCreationException.java:101) ~[spring-data-commons-3.5.6.jar:3.5.6]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lookupQuery(QueryExecutorMethodInterceptor.java:120) ~[spring-data-commons-3.5.6.jar:3.5.6]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.mapMethodsToQuery(QueryExecutorMethodInterceptor.java:104) ~[spring-data-commons-3.5.6.jar:3.5.6]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lambda$new$0(QueryExecutorMethodInterceptor.java:92) ~[spring-data-commons-3.5.6.jar:3.5.6]
at java.base/java.util.Optional.map(Optional.java:260) ~[na:na]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.<init>(QueryExecutorMethodInterceptor.java:92) ~[spring-data-commons-3.5.6.jar:3.5.6]
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:434) ~[spring-data-commons-3.5.6.jar:3.5.6]
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$4(RepositoryFactoryBeanSupport.java:350) ~[spring-data-commons-3.5.6.jar:3.5.6]
at org.springframework.data.util.Lazy.getNullable(Lazy.java:135) ~[spring-data-commons-3.5.6.jar:3.5.6]
at org.springframework.data.util.Lazy.get(Lazy.java:113) ~[spring-data-commons-3.5.6.jar:3.5.6]
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:356) ~[spring-data-commons-3.5.6.jar:3.5.6]
at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:132) ~[spring-data-jpa-3.5.6.jar:3.5.6]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1873) ~[spring-beans-6.2.14.jar:6.2.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1822) ~[spring-beans-6.2.14.jar:6.2.14]
... 44 common frames omitted
Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional com.shop.domain.auth.RefreshTokenRepository.findByMemberId(java.lang.Long); Could not resolve attribute 'memberId' of 'com.shop.domain.auth.RefreshToken'
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:107) ~[spring-data-jpa-3.5.6.jar:3.5.6]
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:128) ~[spring-data-jpa-3.5.6.jar:3.5.6]
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:260) ~[spring-data-jpa-3.5.6.jar:3.5.6]
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:99) ~[spring-data-jpa-3.5.6.jar:3.5.6]
at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lookupQuery(QueryExecutorMethodInterceptor.java:116) ~[spring-data-commons-3.5.6.jar:3.5.6]
... 56 common frames omitted
Caused by: org.hibernate.query.sqm.PathElementException: Could not resolve attribute 'memberId' of 'com.shop.domain.auth.RefreshToken'
at org.hibernate.query.sqm.SqmPathSource.getSubPathSource(SqmPathSource.java:95) ~[hibernate-core-6.6.36.Final.jar:6.6.36.Final]
at org.hibernate.query.sqm.tree.domain.AbstractSqmPath.get(AbstractSqmPath.java:199) ~[hibernate-core-6.6.36.Final.jar:6.6.36.Final]
at org.hibernate.query.sqm.tree.domain.AbstractSqmPath.get(AbstractSqmPath.java:44) ~[hibernate-core-6.6.36.Final.jar:6.6.36.Final]
at org.springframework.data.jpa.repository.query.QueryUtils.getModelForPath(QueryUtils.java:1015) ~[spring-data-jpa-3.5.6.jar:3.5.6]
at org.springframework.data.jpa.repository.query.QueryUtils.requiresOuterJoin(QueryUtils.java:865) ~[spring-data-jpa-3.5.6.jar:3.5.6]
at org.springframework.data.jpa.repository.query.QueryUtils.toExpressionRecursively(QueryUtils.java:820) ~[spring-data-jpa-3.5.6.jar:3.5.6]
at org.springframework.data.jpa.repository.query.QueryUtils.toExpressionRecursively(QueryUtils.java:799) ~[spring-data-jpa-3.5.6.jar:3.5.6]
at org.springframework.data.jpa.repository.query.QueryUtils.toExpressionRecursively(QueryUtils.java:794) ~[spring-data-jpa-3.5.6.jar:3.5.6]
at org.springframework.data.jpa.repository.query.JpaQueryCreator$PredicateBuilder.getTypedPath(JpaQueryCreator.java:393) ~[spring-data-jpa-3.5.6.jar:3.5.6]
at org.springframework.data.jpa.repository.query.JpaQueryCreator$PredicateBuilder.build(JpaQueryCreator.java:313) ~[spring-data-jpa-3.5.6.jar:3.5.6]
at org.springframework.data.jpa.repository.query.JpaQueryCreator.toPredicate(JpaQueryCreator.java:211) ~[spring-data-jpa-3.5.6.jar:3.5.6]
at org.springframework.data.jpa.repository.query.JpaQueryCreator.create(JpaQueryCreator.java:122) ~[spring-data-jpa-3.5.6.jar:3.5.6]
at org.springframework.data.jpa.repository.query.JpaQueryCreator.create(JpaQueryCreator.java:1) ~[spring-data-jpa-3.5.6.jar:3.5.6]
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createCriteria(AbstractQueryCreator.java:119) ~[spring-data-commons-3.5.6.jar:3.5.6]
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:95) ~[spring-data-commons-3.5.6.jar:3.5.6]
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:81) ~[spring-data-commons-3.5.6.jar:3.5.6]
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery$QueryPreparer.<init>(PartTreeJpaQuery.java:224) ~[spring-data-jpa-3.5.6.jar:3.5.6]
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery$CountQueryPreparer.<init>(PartTreeJpaQuery.java:370) ~[spring-data-jpa-3.5.6.jar:3.5.6]
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:103) ~[spring-data-jpa-3.5.6.jar:3.5.6]
... 60 common frames omitted
에러메세지 해석
우선 어레메세지를 보고 에러가 발생한 위치를 파악해보면, AuthController에서 발생했다. AuthController에서 발생한 이유는, 생성자 파라미터를 통해 의존성을 표현할 때 오류가 발생했는데 에러가 발생한 bean은 authService이다. 다시 AuthService는 RefreshTokenRepository에 의존하고 있는데 여기서 오류가 났고, 오류가 난 이유는 'findByMemberId(java.lang.Long);' 메서드를 쿼리로 변환하지 못했다는 뜻이다.
이유는 RefreshToken Entity에 memberId 속성(attribute, 필드)이 없는데 속성 기반 쿼리메서드를 생성하려고 했다는 뜻이다.
에러메세지 분석
## 에러 메시지 분석
UnsatisfiedDependencyException 발생.
의존성 추적:
AuthController
→ AuthService (생성자 주입)
→ RefreshTokenRepository (생성자 주입)
→ findByMemberId() 쿼리 생성 실패 ❌
에러 원인:
"Could not resolve attribute 'memberId' of 'RefreshToken'"
→ RefreshToken Entity에 memberId 필드가 없는데,
Spring Data JPA가 해당 필드로 쿼리를 생성하려 했음
해결방법
public interface RefreshTokenRepository extends JpaRepository<RefreshToken, Long> {
Optional<RefreshToken> findByToken(String token);
Optional<RefreshToken> findByMember_Id(Long memberId);
void deleteByMember_Id(Long memberId);
}
RefreTokenRepository의 쿼리메서드를 수정해주었다. 처음에는 findByMemberId(Long memberId);로 작성했는데 findMember_Id(Long memberId)라고 수정했다.
참고 자료: 쿼리메서드 생성 규칙(https://techbook11.tistory.com/763)
'Error Handling' 카테고리의 다른 글
| [Error Handling] HandlerMapping 에러 (0) | 2025.12.12 |
|---|---|
| [Error Handling] flush 메서드 오류 (0) | 2025.10.15 |
| [Error Handling] Thymeleaf Parsing Error, NotReadablePropertyException 예외 (0) | 2025.09.16 |
| [Error Handling] 파일 업로드 테스트 에러 해결 (0) | 2025.09.15 |
| [Error Handling] Spring Security 로그아웃 버그 해결 (0) | 2025.09.14 |
Comments
