s최근 프로젝트에서 QueryDSL을 적용한 후 실행시켰을때 아래와 같은 문제가 발생하면서 작동이 되지 않는 문제가 있었다.
No property search found for type ********!
이유는 네이밍 규칙 때문에 발생한 오류였다
SpringDataJpa가 제공하는것 외의 QueryMethod를 사용하려면 SpringDataJPA가 정한 규칙을 따라야한다 .
그 규칙은 바로 { reposiotory 명 + Impl } 과 같은 방식으로 네이밍을 하는 것이다.
허나 나의 경우에는 바보같이 UserCheckRepositoryImpl이 맞는 네이밍이라면 UserRepositoryImpl 로 작성을 하여 발생한 버그 였다
그럼 왜 SpringDataJPA는 위와 같은 네이밍 규칙을 갖는것일까?
그 이유는 SpringDataJPA가 해당 네이밍으로 자동검색을 하여 QueryMethod로 사용할 수 있게 하기 때문이다.
그래서 해당 네이밍을 지켜서 만들지 않을 경우에는 Spring Data JPA가 자동검색을 해도 찾을 수 없기 때문에 위와같이 NoPropertry search found 에러가 발생하는 것이다.
그러면 무조건 네이밍 규칙을 따라야하는것인가?
물론 설정을 하면 해당 규칙을 따르지 않을 수 있다.
@EnableJpaRepositories(repositoryImplementationPostfix = "customPostFix")
위와 같은 어노테이션을 사용하면 네이밍 규칙을 바꿀 수 있다.
그런데 굳이 이렇게 까지 바꿔가면서 쓸까 싶다....? 허허허
+ 추가로 더 많은 규칙들은 아래 공식문서에서 확인 할 수 있다.
Spring Data JPA - Reference Documentation
Example 100. Using @Transactional at query methods @Transactional(readOnly = true) public interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") v
docs.spring.io
'Spring' 카테고리의 다른 글
QueryMethod는 어떻게 만들어지는 것일까? (0) | 2021.07.29 |
---|---|
JPQL의 특징 (0) | 2021.07.21 |
QueryDSL은 왜 Q-Class를 사용할까? (2) | 2021.07.15 |
QueryDSL 삽질기 (0) | 2021.07.04 |