JPQL

JPA에서 골치아픈 N+1 문제 해결방법을 몇가지 정리한다. N+1 문제 => ORM에서 많이 발생하는 문제 Entity에 대해 하나의 쿼리로 N개의 레코드를 가져왔을 때, 연관관계 Entity를 가져오기 위해 쿼리를 N번 추가적으로 수행하는 문제 N+1 문제에 대해 흔히들 하는 오해 N+1 문제는 EAGER Fetch 전략때문에 발생한다? X, LAZY로 설정했더라도 연관 Entity를 참조하면 그 순간 추가적인 쿼리가 수행됨 findAll()메서드는 N+1 문제를 발생시키지 않는다? Fetch전략을 적용해서 연관 Entity를 가져오는 것은 오직 단일 레코드에 대해서만 적용 단일 레코드 조회가 아닌 경우(JPQL을 수행하는 경우, findAll() 메서드 역시 이 경우) 해당 JPQL을 먼저 수행(E..
특징 JPQL은 객체지향 쿼리 언어다. 따라서 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다. JPQL은 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. JPQL은 결국 SQL로 변환된다. 기본 문법과 쿼리 API JPQL도 SQL과 비슷하게 SELECT, UPDATE, DELETE 문을 사용 가능 (저장시, EntityManager.persist() 메소드를 사용하므로 INSERT는 존재하지 않음) # JPQL 문법 # select문 select_ from_ [where_ ] [group by_ ] [having_ ] [orderby_ ] # update문 update_ [where_ ] #delete delete_ [where_ ] SELECT 문 SELECT..
TypedQuery query = em.createQuery("select m from Member m", Memeber.class); List memberList = query.getResultList(); JPA는 엔티티 객체를 중심으로 개발을 하므로 SQL을 사용하지 않는다. 하지만 SQL을 사용해야할 때가 필요한데, 바로 검색쿼리를 사용할 때 이다. JPA는 엔티티 객체를 중심으로 개발하므로 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색해야 한다. ⇒ 필요한 데이터만 데이터베이스에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요하다. JPA는 JPQL(Java Persistence Query Language)를 제공한다. JPA는 SQL을 추상화한 JPQL이라는 객체지향 쿼리 언어..
깡냉쓰
'JPQL' 태그의 글 목록