[TIL/JPA] 기본개념 : Named 쿼리
·
TIL/JPA
1. Named 쿼리란?미리 정의해서 이름을 부여해두고 사용하는 JPQL로 이름으로 해당 쿼리를 불러와서 사용할 수 있다.정적 쿼리만 가능하다.어노테이션, XML에 정의할 수 있다.애플리케이션 로딩 시점에 초기화 후 재사용할 수 있다.애플리케이션 로딩 시점에 쿼리를 검증할 수가 있다.(로딩 시점에 파싱을 하고 캐싱을 한다.)2. Named 쿼리 사용해보기Member 엔티티를 가지고 Named 쿼리를 사용해 보겠다.먼저, Member 클래스에 가서 @NamedQuery 어노테이션을 붙여주고, name과 query를 작성해 준다.@Entity@Table(name = "MEMBERS")@NamedQuery( name = "Member.findByUsername", query = "se..
[TIL/JPA] 기본개념 : JPQL에서 엔티티 직접 사용하기
·
TIL/JPA
기본 키 값JPQL에서 엔티티를 직접 사용하면 어떻게 될까??결론을 먼저 말하자면 SQL에서는 해당 엔티티의 기본 키 값을 사용한다. JPQL을 아래와 같이 작성을 하면select count(m.id) from Member m // 엔티티의 아이디를 사용select count(m) from Member m // 엔티티를 직접 사용 SQL은 아래와 같이 나온다. (위의 JPQL 둘 다 같은 SQL을 실행한다)select count(m.id) as cnt from Member m 파라미터로 넘겨도 동일하고,String jpql = "select m from Member m where m = :member"List resultList = em.createQuery(jpql) .setParameter("memb..
[TIL/JPA] 기본개념 : 다형성 쿼리
·
TIL/JPA
위와 같이 설계가 되어있다고 가정을 하고 다형성 쿼리에 대해서 설명을 하겠다. TYPE조회 대상을 특정 자식으로 한정할 수 있다. 예를 들어서 Item 중에 Book, Movie를 조회해라 라고 했을 때 JPQL로 아래와 같이 작성을 하면,select i from Item iwhere type(i) in (Book, Movie) SQL은 아래와 같은 결과가 나온다.select i from iwhere i.DTYPE in ('B', 'M') TREATTREAT는 자바의 타입 캐스팅과 유사하다.상속 구조에서 부모 타입을 특정 자식을 타입으로 다룰 때 사용한다.FROM, WHERE, SELECT(하이버네이트 지원) 사용한다. 예를 들어서 부모인 Item과 자식 Book이 있다.JPQL로 아래와 같이 작성을 하..
[TIL/JPA] 기본개념 : 페치 조인(fetch join)
·
TIL/JPA
1. 페치 조인(fetch join)이란?SQL 조인 종류가 아니다.JPQL에서 성능 최적화를 위해 제공하는 기능이다.연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능이다.join fetch 명령어 사용한다.[LEFT [OUTER] | INNER ] JOIN FETCH 조인 경로2. 엔티티 페치 조인SQL로 한 번에 회원을 조회하면서 연관된 팀도 함께 조회하고싶다면 어떻게 해야할까?SQL을 보면 회원 뿐만 아니라 팀도 함께 SELECT 한다.JPQL은 select m from Member m join fetch m.teamSQL은 SELECT M.*, T.* FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID = T.ID지연 로딩할 때와 같이 쿼리문이 나간다.  위..
[TIL/JPA] 기본개념 : JPQL(Java Persistence Query Language)
·
TIL/JPA
1. JPQL의 소개JPQL은 객체지향 쿼리 언어다. 따라서 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다.JPQL은 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다.JPQL은 결국 SQL 변환된다.2. 벌크 연산벌크 연산은 여러 개의 데이터를 조회하거나 수정, 삭제할 때 사용하는 것이다.JPQL에 대한 학습 내용을 작성하기 전에 객체 모델과 DB 모델 그리고 실제 코드로 엔티티를 구현한 것을 먼저 적어보았다. @Entitypublic class Member { @Id @GeneratedValue private Long id; private String username; private int age; @ManyToOne @Joi..
[TIL/JPA] 기본개념 : JPA의 다양한 쿼리 방법 소개
·
TIL/JPA
1. 다양한 쿼리 방법의 간단한 소개JPA는 다양한 쿼리 방법을 지원한다.결국 SQL이 실행되어야 하고 실무에서는 복잡한 쿼리를 사용해서 데이터를 뽑아와야한다.JPQL이라는 표준 문법이 있고 JPA Criteria, QueryDSL(Java 코드로 짜서 JPQL을 빌드해주는 제네레이터 클래스의 모음), 네이티브 SQL(JPQL이 아닌 데이터베이스에 종속적인 쿼리를 사용해야 할 때 사용)가 있다.1) JPQL 소개JPQL은 가장 단순한 조회 방법이며(ex. EntityManager.find() ) 객체 그래프 탐색(a.getB().getC())이다.만약에 나이가 18살 이상인 회원을 모두 검색하고 싶다고 하자 이런 상황에서는 1개만 조회할 것이 아니라 WHERE 문을 사용해서 조건을 걸어야 하는 상황이 발..