MemberRepository Interface
public interface MemberRepository extends JpaRepository<Member, Long> {
List<Member> findByUsernameAndAgeGreaterThan(String username, int age);
List<Member> findTop3HelloBy();
List<Member> findByUsername(@Param("username") String username);
@Query("select m from Member m where m.username = :username and m.age = :age")
List<Member> findUser(@Param("username") String username, @Param("age") int age);
}
MemberRepositoryTest를 아래와 같이 지정하고 빌드를 돌리면 실행결과가 아래와 같이 나타난다.
@Test
public void testQuery() {
Member m1 = new Member("AAA", 10);
Member m2 = new Member("BBB", 20);
memberRepository.save(m1);
memberRepository.save(m2);
List<Member> result = memberRepository.findUser("AAA", 10);
Member findMember = result.get(0);
assertThat(findMember).isEqualTo(m1);
}
// build 결과
select
member0_.member_id as member_i1_0_,
member0_.age as age2_0_,
member0_.tema_id as tema_id4_0_,
member0_.username as username3_0_
from
member member0_
where
member0_.username=?
and member0_.age=?
select member0_.member_id as member_i1_0_, member0_.age as age2_0_, member0_.tema_id as tema_id4_0_, member0_.username as username3_0_ from member member0_ where member0_.username='AAA' and member0_.age=10;
아래와 같이 오류를 의도해서 내보내면 build과정에서 에러를 발생시킨다.
public interface MemberRepository extends JpaRepository<Member, Long> {
List<Member> findByUsernameAndAgeGreaterThan(String username, int age);
List<Member> findTop3HelloBy();
List<Member> findByUsername(@Param("username") String username);
// 애플리케이션 로딩시점에 일단 다 파싱을 해버린다. => SQL을 다 만들어 놓는다.
@Query("select m from Member m where m.usernameasdf = :username and m.age = :age")
List<Member> findUser(@Param("username") String username, @Param("age") int age);
}
Caused by: org.hibernate.QueryException: could not resolve property: usernameasdf of: study.datajpa.entity.Member [select m from study.datajpa.entity.Member m where m.usernameasdf = :username and m.age = :age]
<출처 김영한: 실전! 스프링 데이터 JPA >
실전! 스프링 데이터 JPA - 인프런 | 강의
스프링 데이터 JPA는 기존의 한계를 넘어 마치 마법처럼 리포지토리에 구현 클래스 없이 인터페이스만으로 개발을 완료할 수 있습니다. 그리고 반복 개발해온 기본 CRUD 기능도 모두 제공합니다.
www.inflearn.com
'Spring > SpringDataJPA' 카테고리의 다른 글
반환 타입 (0) | 2022.04.17 |
---|---|
@Query, 값, DTO 조회하기 & 파라미터 바인딩 (0) | 2022.04.17 |
JPA NamedQuery (0) | 2022.04.17 |
메소드 이름으로 쿼리 생성 (0) | 2022.04.15 |
공통 인터페이스 분석 (0) | 2022.04.15 |