티스토리 뷰

JPA에서 @Query 애너테이션을 사용할 때, 일반적으로 @Param 애너테이션을 사용하여 파라미터명과 매핑할 이름을 지정해주어야 합니다.

하지만 다음과 같은 경우에는 @Param을 생략할 수 있습니다.

파라미터명과 매핑할 이름이 동일한 경우

예를 들어, 다음과 같이 파라미터명과 매핑할 이름이 모두 "name"인 경우에는 @Param을 생략할 수 있습니다.

@Query("SELECT u FROM User u WHERE u.name = :name")
User findByName(String name);

파라미터가 하나인 경우

파라미터가 하나뿐인 경우에는 @Param을 생략할 수 있습니다. 이 경우에는 파라미터명과 매핑할 이름이 자동으로 "0", "1", "2" 등으로 지정됩니다.

@Query("SELECT u FROM User u WHERE u.name = ?1")
User findByName(String name);

Spring Data JPA 2.0 이상을 사용하는 경우

Spring Data JPA 2.0 이상부터는 파라미터명과 매핑할 이름을 지정하지 않아도 자동으로 매핑됩니다.

@Query("SELECT u FROM User u WHERE u.name = :name")
User findByName(String name);

따라서 위의 경우들에 해당하지 않는 한, @Param을 사용하여 파라미터명과 매핑할 이름을 지정해주는 것이 좋습니다.

특히 JPA 2.0이상을 사용해서 @Param을 붙여주지 않은 경우, 더 낮은 버전에서 같은 코드를 사용할 경우 에러가 발생하게 되므로 버전의 싱크를 맞추든지 하위 호환이 가능하도록 코딩하는 습관을 들여야 하겠네요.

댓글