JPA의 NamedQuery 는 쿼리에 이름을 부여하고 호출하는 기능입니다.
사실 거의 실무에서 쓸 일이 없습니다.
@Entity
@NamedQuery(name="Member.findByUsername",
query="select m from Member m where m.username = :username")
public class Member {
...
}
@Repository
public class MemberJpaRepository {
public List<Member> findByUsername(String username) {
List<Member> resultList =
em.createNamedQuery("Member.findByUsername", Member.class)
.setParameter("username", username)
.getResultList();
}
}
문제는 없다고 하지만 여전히 작성해야하는 코드가 존재합니다. 스프링 데이터 JPA로 편하게 변경해봅시다.
import org.springframework.data.repository.query.Param;
public interface MemberRepository extends JpaRepository<Member, Long> {
@Query(name = "Member.findByUsername")
List<Member> findByUsername(@Param("username") String username);
}
@Query(name = "Member.findByUsername")
는 엔티티에 적어준 jpql 을 가리킵니다.참고로 @Query(name = "Member.findByUsername")
를 따로 적어주지 않더라도 실행됩니다.
import org.springframework.data.repository.query.Param;
public interface MemberRepository extends JpaRepository<Member, Long> {
//@Query(name = "Member.findByUsername")
List<Member> findByUsername(@Param("username") String username);
}