error
[JPA] @Query 어노테이션 사용시 주의점 정리
wjdwwidz
2024. 8. 4. 19:00
아래와 같이 메서드를 작성했으나 실행되지 않았다
@Query("SELECT p FROM Post p WHERE p.postType = :postType AND p.id = :id")
void findPostByPostTypeAndId(PostType postType, long id);
주의해야할 것
1. jpa 는 table 이름이 아니라 entity 이름이 들어가야한다
2. findBy 는 <Optional> 로 반환해야한다
@Query("SELECT p FROM Post p WHERE p.postType = :postType AND p.id = :id")
Optional<Post> findPostbyPostTypeAndId(@Param("postType") PostType postType, @Param("id") Long id)
이렇게 고칠 수 있다
@Query () 를 없애고 아래처럼 작성할 경우 정상 실행된다
Optional<Post> findPostByIdAndPostType(long id, PostType postType);
기억해야 하는 것
1. JPA는 메서드 이름으로 추론해서 쿼리를 생성한다. (규칙 존재)
2. @Query 어노테이션을 사용해서 이름 무시하고 바로 쿼리 실행하게 할 수 있다.
3. @Query 어노테이션을 사용할때 파라미터가 있으면 반드시 파라미터를 지정해줘야하는데 방법이 2가지다
- 3-1 순서로 지정하기
순서로 지정하는 것은 select p from Post p where postType = ?1 처럼 할 수 있다 - 3-2 이름으로 지정하기
는 :id, :postType 같은건데, 이렇게 하면 반드시 @Param 어노테이션을 파라미터 앞에 붙여야한다.