AuctionOrderRepository 등에 정의한 findByAuctionIdForUpdate 메서드 호출 또는 애플리케이션 로딩 시, PropertyReferenceException: No property 'forUpdate' found for type ... 에러가 발생하며 실행 불가.findByAuctionIdForUpdate를 auctionId 필드 내부의 forUpdate라는 프로퍼티를 찾으라는 조건(auctionId.forUpdate)으로 오인하여 매핑에 실패함.@Query 어노테이션을 사용해 실행할 JPQL을 직접 명시하여 파싱 오류를 원천 차단함. (추가적으로 ForUpdate의 의도에 맞게 비관적 락도 함께 명시)개선 전
JPA가 ForUpdate를 예약어가 아닌 필드명으로 인식하여, AuctionOrder 엔티티 내 auctionId 객체의 forUpdate 필드를 찾으려 시도하다 실패.
public interface AuctionOrderRepository extends JpaRepository<AuctionOrder, Long> {
// 에러 발생: auctionId.forUpdate 프로퍼티를 찾을 수 없음
Optional<AuctionOrder> findByAuctionIdForUpdate(Long auctionId);
}
개선 후
@Query를 통해 쿼리를 직접 지정함으로써 메서드 이름은 단순 식별자로만 사용됨. 네이밍 제약에서 벗어나고 가독성 확보.
public interface AuctionOrderRepository extends JpaRepository<AuctionOrder, Long> {
// 명시적 쿼리 작성으로 파싱 에러 방지 + 락 적용
@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("SELECT ao FROM AuctionOrder ao WHERE ao.auctionId = :auctionId")
Optional<AuctionOrder> findByAuctionIdForUpdate(@Param("auctionId") Long auctionId);
}