본문 바로가기
JPA

@Param 어노테이션은 언제 생략 가능할까?

by asdft 2024. 2. 22.

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

 

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

 

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

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

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

 

2. 파라미터가 하나인 경우

파라미터가 하나뿐인 경우에는 @Param을 생략할 수 있다.

아래 예시의 경우에는 파라미터명과 매핑할 이름이 자동으로 "0", "1", "2" 등으로 지정된다.

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

 

 

3. 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을 붙여주지 않은 경우, 더 낮은 버전에서 같은 코드를 사용할 경우 에러가 발생하게 되므로 버전의 싱크를 맞추든지 하위 호환이 가능하도록 작성하도록 한다.