728x90

jpql 6

Criteria 기초(feat. JPQL의 빌더 클래스)

Criteria 쿼리는 JPQL을 자바 코드로 작성하도록 도와주는 빌더 클래스 API다. Criteria를 사용하면 문자가 아닌 코드로 JPQL을 작성하므로 문법 오류를 컴파일 단계에서 잡을 수 있고 문자 기반의 JPQL보다 동적 쿼리를 안전하게 생성할 수 있는 장점이 있다. 하지만 실제 Criteria를 사용해서 개발해보면 코드가 복잡하고 장황해서 직관적으로 이해가 힘들다는 단점도 있다. //JPQL: select m from Member m CriteriaBuilder cb = em.getCriteriaBuilder(); //Criteria 쿼리 빌더 ...1 //Criteria 생성, 반환 타입 지정 ...2 CriteriaQuery cq = cb.createQuery(Member.class); R..

JPA 2022.06.16

페치 조인과 일반 조인의 차이(feat. 연관된 엔티티 함께 조회)

페치 조인을 사용하지 않고 조인만 사용하면 어떻게 될까 select t-- 내부 조인 JPQL from Team t join t.members m where t.name = '팀A' SELECT--실행된 SQL T.* FROM TEAM T INNER JOIN MEMBER M ON T.ID=M.TEAM_ID WHERE T.NAME = '팀A' JPQL에서 팀과 회원 컬렉션을 조인했으므로 회원 컬렉션도 함께 조회할 것으로 기대해선 안 된다. 실행된 SQL의 SELECT 절을 보면 팀만 조회하고 조인했던 회원은 전혀 조회하지 않는다. JPQL은 결과를 반환할 때 연관관계까지 고려하지 않는다. 단지 SELECT 절에 지정한 엔티티만 조회할 뿐이다. 따라서 팀 엔티티만 조회하고 연관된 회원 컬렉션은 조회하지 않는..

JPA 2022.06.15

객체지향 쿼리 소개(feat. JPQL)

EntityManager.find() 메소드를 사용하면 식별자로 엔티티 하나를 조회할 수 있다. 이렇게 조회한 엔티티에 객체 그래프 탐색을 사용하면 연관된 엔티티들을 찾을 수 있다. 이 둘은 가장 단순한 검색 방법이다. 식별자로 조회 EntityManager.find() 객체 그래프 탐색(예: a.getB().getC()) ORM을 사용하면 데이터베이스 테이블이 아닌 엔티티 객체를 대상으로 개발하므로 검색도 테이블이 아닌 엔티티 객체를 대상으로 하는 방법이 필요하다. JPQL은 이런 문제를 해결하기 위해 만들어졌는데 다음과 같은 특징이 있다. 테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리다. SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. JPQL은 엔티티 객체를 대상으로 하는 객..

JPA 2022.06.14

(Spring data JPA) 쿼리 메소드란?

스프링 데이터 JPA의 예 스프링 데이터 JPA는 메소드 이름을 분석해서 JPQL을 생성하고 실행(코드량이 줄어들어 효율성 증가) public interface MemberRepository extends JpaRepository { List findByUsernameAndAgeGreaterThan(String username, int age); } 위와 같이, 메소드 이름으로 쿼리를 생성하는 기능을 쿼리 메소드라고 하며 기능은 Spring 공식 홈페이지에 정리되어 있으며 간단히 정리하면 아래와 같습니다. 스프링 공식문서 참고 - https://docs.spring.io/spring-data/jpa/docs/current/reference/html/ 조회: find…By ,read…By ,query…By..

JPA 2022.02.15

JPQL과 QueryDSL의 차이

JPQL과 Querydsl의 정의 JPQL(Java Persistence Query Language) JPA에서 제공하는 메서드 호출만으로 섬세한 쿼리 작성이 어려워서 생겨났습니다. JPA는 JPQL을 분석하여 SQL을 생성한 후 DB에서 조회합니다. Querydsl SQL을 java로 type-safe하게 개발 할 수 있게 해주는 프레임워크 Querydsl -> JPQL -> SQL 와 같이 동작 JPQL을 편하게 사용할 수 있게 도와주는 빌더의 역할 @SpringBootTest @Transactional public class QuerydslBasicTest { @Autowired EntityManager em; JPAQueryFactory queryFactory; @BeforeEach //클래스에 ..

JPA 2022.02.14
728x90