[JPA] JPQL Named 쿼리

hi·2022년 10월 16일

Named 쿼리

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

@Entity
@NamedQuery(
	name = "Member.findByUsername",
    query = "select m from Member m where m.username = "username"
)
public class Member {
	...
}

어노테이션

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

XML에 정의

[META-INF/persistence.xml]

<persistence-unit name="jpabook" >
	<mapping-file>META-INF/ormMember.xml</mapping-file>

[META-INF/ormMember.xml]

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm" version="2.1">

	<named-query name="Member.findByUsername">
		<query><![CDATA[
 			select m
 			from Member m
 			where m.username = :username
 		]]></query>
 	</named-query>
 
 	<named-query name="Member.count">
 		<query>select count(m) from Member m</query>
 	</named-query>

</entity-mappings>
  • XML이 항상 우선권을 가진다
  • 애플리케이션 운영 환경에 따라 다른 XML 배포 가능

Spring data JPA

  • 인터페이스 메서드에 바로 선언 가능
  • 애플리케이션 로딩 시점에 파싱하여 문법 오류시 바로 잡아줌
public interface UserRepository extends JpaRepository<User, Long> {

	@Query("select u from User u where u.emailAddress = ?1")
	User findByAddress(String emailAddress);
}

0개의 댓글