본문 바로가기

Spring

SpringDataJPA에서 Custom 할때 지켜야하는 규칙

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")

위와 같은 어노테이션을 사용하면 네이밍 규칙을 바꿀 수 있다.

 

그런데 굳이 이렇게 까지 바꿔가면서 쓸까 싶다....? 허허허

 

 

 

 

 

 

+ 추가로 더 많은 규칙들은 아래 공식문서에서 확인 할 수 있다.

 

https://docs.spring.io/spring-data/jpa/docs/2.1.3.RELEASE/reference/html/#repositories.custom-implementations

 

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를 사용할까?  (1) 2021.07.15
QueryDSL 삽질기  (0) 2021.07.04