[TIL/JPA] 기본개념 : 벌크 연산
·
TIL/JPA
벌크 연산 설명과 사용법벌크 연산은 말 그대로 여러 데이터를 한꺼번에 변경하는 것을 의미한다. 예를 들어 재고가 10개 미만인 모든 상품의 가격을 10% 상승시키려고 한다면 JPA 변경 감지 기능으로 실행하려면 너무 많은 SQL을 실행시켜야 한다.즉, 아래와 같은 과정으로 실행이 될 것이다.재고가 10개 미만인 상품을 리스트로 조회상품 엔티티의 가격을 10% 증가트랙재션 커밋 시점에 변경감지가 동작변경된 데이터가 100건, 1000건이라면 100번, 1000번의 UPDATE SQL을 실행시킨다. 벌크 연산은...쿼리 한 번으로 여러 테이블 로우 변경(엔티티)executeUpdate()의 결과는 영향받은 엔티티 수를 반환한다.UPDATE, DELETE 지원한다.INSERT(insert into .. sel..
[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로 아래와 같이 작성을 하..