programming/JPA
[JPA] Reason: Validation failed for query for method public abstract java.util.List 오류 해결
오택
2023. 6. 12. 13:52
# 코드
public interface MemberRepository extends CrudRepository<Member, String>{
@Query("SELECT m.uid, count(p) FROM Member m LEFT OUTER JOIN Profile p "
+ "On m.uid = p.member WHERE m.uid = ?1 GROUP BY m")
public List<Object[]> getMemberWithProfileCount(String uid);
}
# 오류 발생
MemberRepository를 위와 같이 작성했을 때,
다음과 같은 오류가 발생했다.
Error creating bean with name 'memberRepository' defined in org.zerock.persistence.MemberRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract java.util.List org.zerock.persistence.MemberRepository.getMemberWithProfileCount(java.lang.String); Reason: Validation failed for query for method public abstract java.util.List org.zerock.persistence.MemberRepository.getMemberWithProfileCount(java.lang.String)
# 해결 방법
JPQL 방식을 버리고 nativeQuery 방식으로 바꿔서 해결
public interface MemberRepository extends CrudRepository<Member, String>{
@Query(value = "SELECT m.uid, count(fname) FROM tbl_members m LEFT OUTER JOIN tbl_profile p "
+ "On m.uid = p.member_uid WHERE m.uid = ?1 GROUP BY m.uid", nativeQuery = true)
public List<Object[]> getMemberWithProfileCount(String uid);
}