2020년 8월 4일 화요일
2020년 8월 3일 월요일
JPA 메서드로 쿼리 생성시 주의 사항
메서드로 쿼리를 만들다 보면 분명 정확하게 했는데
Unable to locate Attribute with the the given name [] on this ManagedType []
이런 오류를 뱉으면서 안될때가 있다.
뭐 당연히 변수 명은 camelcase 로 정의 했을것이고
method 에서는 대문자로 시작했지.
Entity
private String aTest;
Repository
private findByATest(String aTest);
이렇게 하면 문제 없는거 아냐?
문제 없을것 같지만 안된다
문제의 원인은
위 Entity 에서 정의한 변수명 룰에 있다.
첫 시작 소문자가 1자리면 안된다.
예를 들어
Entity
private String aaTest;
Repository
private findByAaTest(String aTest);
로 수정 후 테스트 시 문제 없는것을 확인 했다.
문제를 알았으니 왜 인지를 알아야 하는데
아직 모르겠다.
왜일까..
이런 저런 정보를 보았을때 Java Bean naming conventions 에 영향을 받는것이 아닌가 싶다..
-- 정리 --
해당 문제를 피해갈수 있는 방법
1. 변수의 시작을 무조건 소문자 한자리로 시작 하지 않는다.
aTest => aaTest
2. 룰에 맞지 않는 변태 같은 짓이지만 변수의 시작을 대문자로 바꾼다.
aTest => ATest
해당 문제가 발생 한 이유는
Entity 에 테이블의 접두사 T 를 항상 붙였다.
예를 들어 code 관련 테이블은 TCode
이럴때 당연히 camelcase 로 변경 하면 tCode 인데
이것때문에 문제가 생겼다.
우선 근본적인 원인을 찾기 전까지는 접두사 T 를 붙이는 짓은 피하자.
피드 구독하기:
글 (Atom)