JPA를 사용하여 엔티티 객체를 중심으로 개발하면 검색 할 때 문제가 발생한다.
테이블이 아닌 엔티티 객체를 대상으로 검색하는데, 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하기 때문이다.
따라서 필요한 데이터만 DB에서 불러오는 SQL이 필요하다.
SQL을 추상화한 객체 지향 쿼리 언어
//검색
String jpql = "select m From Member m where m.name like ‘%hello%'";
List<Member> result = em.createQuery(jpql, Member.class).getResultList();
너무 복잡하고 실용성이 없어 실무에서 사용안함.
Criteria 대신 QueryDSL 사용을 권장
동정 쿼리가 필요할 때 사용, 문자가 아닌 자바코드로 JPQL을 작성
//JPQL
//select m from Member m where m.age > 18
JPAFactoryQuery query = new JPAQueryFactory(em);
QMember m = QMember.member;
List<Member> list =
query.selectFrom(m)
.where(m.age.gt(18))
.orderBy(m.name.desc())
.fetch();
JPA가 제공하는 SQL을 직접 사용
String sql = “SELECT ID, AGE, TEAM_ID, NAME FROM MEMBER WHERE NAME = ‘kim’";
List<Member> resultList = em.createNativeQuery(sql, Member.class).getResultList();