2024. 11. 19. 14:29ㆍSpring/JPA-Plus 과제
📁️ github 참고
https://github.com/kuk1157/spring-plus/commit/05cae3c4514c95331958ca1f9303da8c52a5985b
🛠️ 트러블슈팅 - QueryDSL 적용 중에 발생한 no property found for type오류
1. 개요
- QueryDSL을 적용할때 발생한 no property found for type 오류에 대한 트러블 슈팅을 작성해보겠습니다.
2. 배경
- gradle에서 의존성 추가 및 설정파일에서 EntityManager인터페이스와 JPAQueryFactory클래스를 세팅했습니다.
3. 발단
- 위 과정들을 진행하고 나서 no property found for type오류가 계속 발생해서 오류해결을 하기위해 계속 검색했습니다.
4. 전개
- QueryDSL과 연관되는 Repository 파일 3가지의 파일명을 규칙을 지키지 않으면 오류가 발생한다고 해서 맞췄습니다.
- 카멜케이스의 쿼리메소드를 확인하고, 해당되는 엔티티의 필드명을확인(존재하지않는필드명)도 하였습니다.
5. 위기
- 위 과정들을 다 거쳤는데도 계속 오류는 발생했고, RepositoryCustom 파일에서 쿼리메소드명을 변경하면서 테스트를 진행했습니다.
6. 절정
- 쿼리메소드를 바꾸면서 JPA기본제공되는 쿼리메소드로 변경하니 잘되는것을 확인했습니다. 이때 순간 착각을 했는데 QueryDSL도 JPA에서 제공되는 쿼리메서드명과 맞춰야하는건가? 라고 생각을 해버리고 테스트를 진행했습니다.
테스트가 정상적으로 완료되길래 이렇게 하는게 맞나보다라고 하는 찰나에 뒤늦게 내가 작성한 QueyDSL 자체가 적용이 안되는게 아닌가? 라는 의문이 생겼습니다.
- QueryDSL로 만들어둔 쿼리메소드를 아예 정상적으로 불러오질 못하고 있었습니다.
- 전개단계에서 진행했던 Repository관련 파일 3개의 파일명을 제대로 맞추지 않고 생성하게 되면 QueryDSL을 아예 인식을 못하고 JPA로 인식한다는 것을 알게되었습니다. RepositoryCustom파일에서 JPA에서 제공되는 쿼리메소드명으로 맞췄을때 정상적으로 테스트가 되었던게 그 이유에서 였습니다.
※ 결과적으로 파일명을 제대로 맞췄다고 생각했는데 그거 조차도 다르게 이름을 지었었습니다. 참고했던 블로그 글들을 다시 제대로 읽어보았고, 읽어보니 내가 맞췄다고 생각한 파일명과 다른것을 발견할 수 있었습니다.
https://lincoding.tistory.com/110
- 해당링크참고
https://wildeveloperetrain.tistory.com/281
- 해당링크참고
7. 결말
1) gradle에 의존성 추가, build/clean, other/compileJava 2가지 실행(Q클래스 생성)
2) config에 JPAQueryFactory, EntityManager 세팅
3) 엔티티명Repository, 엔티티명RepositoryCustom, 엔티티명RepositoryQueryImpl 세팅
- 여기서 Impl파일명이 잘못되었었음.
4) QueryImpl에서 QueryDSL사용한 문법으로 변경
5) 4번에서 만든 쿼리가 정상적으로 작용된다고 착각했었음.
- JPA기본제공 쿼리메서드를 사용해서 JPA로 인식해서 QueryDSL이 정상작동하는것처럼 보이는 것이었음.
6) 최종적으로 파일명은 엔티티명Repository, 엔티티명RepositoryCustom, 엔티티명RepositoryImpl 이렇게 맞춰야함.
※ no property found for type오류 해결과정
1) repository, custom, impl 3개 파일 파일명 맞추기
2) 카멜케이스의 쿼리메소드 확인, 해당되는 엔티티의 필드명확인(존재하지않는 필드명)
3) impl파일명이 QueryImpl이 아니라 Impl로 끝이나야했음. 1번에서 잘못했었음.
'Spring > JPA-Plus 과제' 카테고리의 다른 글
[19] Spring - Spring Security 트러블 슈팅 (0) | 2024.11.21 |
---|---|
[16] Spring - JPA-Plus 과제 필수레벨_2 (2) | 2024.11.19 |
[15] Spring - JPA-Plus 과제 필수레벨_1 (0) | 2024.11.18 |