아래와 같이 메서드를 작성했으나 실행되지 않았다
@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 어노테이션을 파라미터 앞에 붙여야한다.
'error' 카테고리의 다른 글
[NestJS] .env 경로 설정 (0) | 2024.09.29 |
---|---|
[SQL] Incorrect string value, Data too long for column (0) | 2024.07.30 |
[Redis] Unable to connect to Redis : 로컬에 Redis init 시 config 파일 가져오기 (0) | 2024.07.28 |
Unsupported Java. Your build is currently configured to use Java 22.0.1 and Gradle 8.7. (0) | 2024.07.09 |
iptables NAT 테이블을 활용한 포트포워딩 에러 해결 (0) | 2024.07.09 |