궁금증이 들게한 코드
fun findByMallNoAndIssuableConstraintPromotionCode(mallNo: Int, promotionCode: String): List<Coupon>
JPA 에서 객체안의 필드들로 조건을 걸려면 _ (언더스코어) 로 해야한다고만 알고있었는데 아니었다.
알고보니 위와 같이 조건-객체필드 조합으로 작성하면 객체안의 필드를 조건으로 걸 수 있다.
조건-객체필드 조합으로 작성하면, 내부적으로는 다음과 같이 필드를 탐색한다.
탐색대상: findByMallNoAndIssuableConstraintPromotionCode
객체 필드
1차 findByMallNoAndIssuableConstraintPromotionCode
2차 findByMallNoAndIssuableConstraintPromotionCode
3차 findByMallNoAndIssuableConstraintPromotionCode
... (찾을때까지 탐색)
카멜케이스로 작성하면 좋은점은, 기존의 코드를 작성할때와 동일하게 작성할수 있다는 점. 하지만 개인적으로는 언더스코어로 명확하게 나눠서 구분할 수 있는 것을 선호한다.
그리고 만약에라도 1차 탐색 시 해당하는 필드갑시 존재하게 되면 (원하지 않았던 동작), 이상한 조건으로 쿼리문이 생성 될 수 있으니 조심해야한다. (ex. 찾으려는 조건은 IssuableConstraint.promotionCode 지만, IssuableConstraintPromotionCode 라는 필드가 존재하면 후자로 조건을 걸게 된다)
_(언더스코어)로 해도 동일한 동작을 하지만, 언더스코어는 reserved character라서, 위와 같이 카멜케이스로 작성하는 것을 권장한다.
인텔리제이에서 언더스코어로 작성하면 노란줄로 경고가 뜨는데, 아마 Spring Data JPA에서 권장하는 사항이 아니여서 그렇게 나오는 것 같다.