ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Named 쿼리
    JPA/JPQL 2023. 8. 9. 14:37

    Named 쿼리 - 정적 쿼리

     

    • 미리 정의해서 이름을 부여해두고 사용하는 JPQL
    • 어노테이션, XML에 정의가능
    • 애플리케이션 로딩 시점에 초기화 후 재사용
    • 애플리케이션 로딩 시점에 쿼리를 검증

     

    선언 방법

    @Entity
    @NamedQuery(
            name = "Member.findByUsername",
            query = "select m from Member m where m.username = :username"
    )
    @Getter @Setter
    public class Member {
    
        @Id @GeneratedValue
        private Long id;
        private String username;
        private int age;
    
        @ManyToOne
        @JoinColumn(name = "TEAM_ID")
        private Team team;
    }

    Member 엔티티의 객체 선언 위에 어노테이션으로 @NamedQuery를 만들어준다.

     

    List<Member> resultList = em.createNamedQuery("Member.findByUsername", Member.class)
                    .setParameter("username", "member1")
                    .getResultList();

    메인 메서드에서 쿼리 부분에 @NamedQuery의 이름을 적어주면 된다.

     

    이러한 방식의 장점은 어노테이션으로 등록이 되기 때문에 만약에 문법에 맞지 않는다면 오류가 날 수 있다.

    에러중에 가장 좋은 것은 컴파일 타입 에러인데, 실행 시점에서 잡아주기 때문에 에러를 더 쉽게 잡을 수 있다는 장점이 있다.

     

     

    그런데 엔티티가 너무 복잡해지고 스프링 데이터 JPA와 QueryDSL이라는 대체 기술이 있어서 많이 쓰이지는 않는다고 한다.

    'JPA > JPQL' 카테고리의 다른 글

    벌크 연산  (0) 2023.08.09
    엔티티를 직접 사용하기  (0) 2023.08.09
    페치 조인의 한계  (0) 2023.08.09
    페치 조인(fetch join)  (0) 2023.08.09
    경로 표현식  (0) 2023.08.09
Designed by Tistory.