728x90
반응형
SMALL
반응형
SMALL
2024.11.01 업데이트
NamedQuery란, 문자열로만 이루어진 쿼리문에 이름을 부여해서 가져다가 사용할 수 있는 방식을 말하는데, 이게 굉장히 유용하다. 특히 Spring Data JPA와 같이 사용하게 된다면.
우선 Spring Data JPA가 없다고 가정했을 때 작성하는 방법은 @Entity 어노테이션이 있는 엔티티에 @NamedQuery 어노테이션을 사용하면 된다.
@Entity
@NamedQuery(
name = "Member.findByUsername",
query = "select m from Member m where m.username = :username")
public class Member {
...
}
- 이처럼 작성하면 된다. 그리고 name은 마음대로 지어도 되지만, 이렇게 엔티티 위에 작성하는 경우에는 `엔티티.Xxx`로 사용하는게 관례다.
- 사용은 아래 코드처럼 하면 된다.
List<Member> resultList = em.createNamedQuery("Member.findByUsername", Member.class)
.setParameter("username", "회원1")
.getResultList();
근데 여기서 NamedQuery가 주는 이점은 컴파일 시점에 쿼리에 문제가 있으면 잡아준다는 것이다.
이 덕분에 쿼리에 문제, 문법 오류가 있는 경우를 방지할 수 있게 된다. 나중에 Spring Data JPA를 사용하면 다음과 같이 정말 편리하고 보기 좋게 사용할 수 있다.
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u where u.emailAddress = ?1")
User findByEmailAddress(String emailAddress);
}
인터페이스에서 메서드 시그니쳐만 생성해놔도 @Query 어노테이션으로 쿼리를 작성하고 쿼리에 오류가 있는지도 잡아주고 가져다가 사용만 하면 된다.
728x90
반응형
LIST
'JPA(Java Persistence API)' 카테고리의 다른 글
[JPA] OSIV (Open Session In View) (0) | 2023.11.16 |
---|---|
[JPA] Part 18. 벌크 연산 (0) | 2023.10.30 |
[JPA] Part 16. Fetch JOIN (JPQL) (0) | 2023.10.30 |
[JPA] Part 15. JPQL (0) | 2023.10.28 |
[JPA] Part 14. 값 타입 컬렉션 (0) | 2023.10.25 |