QueryDSL 사용을 위해서 JPA Custom Repository를 만드는데 아래와 같은 에러가 났다.
springframework.data.repository.query.QueryCreationException:
Could not create query for public abstract java.util.List com.isntyet.java.practice.home.domain.HomeRepositoryCustom.findAllHomesByFilter(java.lang.String);
Reason: Failed to create query for method public abstract java.util.List com.isntyet.java.practice.home.domain.HomeRepositoryCustom.findAllHomesByFilter(java.lang.String)! No property 'filter' found for type 'Home';
nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List com.isntyet.java.practice.home.domain.HomeRepositoryCustom.findAllHomesByFilter(java.lang.String)! No property 'filter' found for type 'Home'
HomeRepository
public interface HomeRepository extends JpaRepository<Home, Long>, HomeRepositoryCustom {
Home findByName(String name);
HomeRepositoryCustom
public interface HomeRepositoryCustom {
List<Home> findAllHomesByFilter(String name);
HomeRepositoryCustomImpl
@RequiredArgsConstructor
@Repository
public class HomeRepositoryCustomImpl implements HomeRepositoryCustom {
private final JPAQueryFactory queryFactory;
@Override
public List<Home> findAllHomesByFilter(String name) {
return null;
위의 4.6.1 Customizing Individual Repositories 에서 말했듯이
Custom Repository 구현체 클래스 뒤에 ~Impl 만 붙여주면 될 줄 알았다.
그래서 HomeRepositoryCustomImpl 라고 대충 이름 지어버린게 문제였다.
구현체의 이름은 Repository Interface 이름 그대로 뒤에 Impl을 붙여야 한다.
HomeRepositoryCustomImpl 처럼 가운데에 Custom이라는 이름이 들어가버려서 생긴 문제였다.
HomeRepositoryCustomImpl → HomeRepositoryImpl 이렇게 수정해주니 문제는 해결되었다.
Feign은 Http Client 도구인데 example을 보는 순간 직관적인 형태에 끌려 사용해보게 되었다.
(RestTemplate, WebClient 등을 쓰다가 Feign을 써보게 되면 Feign만 쓰게될꺼다)
Feign은 인터페이스와 annotation을 이용하여 아주 간...