다형성 쿼리
TYPE : 조회 대상을 특정 자식으로 한정
TREAT : 자바의 타입 캐스팅과 유사
상속 구조에서 부모 타입을 특정 자식 타입으로 다룰 때 사용
엔티티 직접 사용
JPQL에서 엔티티를 직접 사용하면 SQL에서 해당 엔티티의 기본 키 값을 사용
Named쿼리
@NameQuery(
name = "Member.findByUsername",
query = "select m from Member m where m.username = :username"
)
>>말 그대로 쿼리에 이름을 부여 하는것, 쿼리를 재활용 가능
미리 정의해서 이름을 부여해두고 사용하는 JPQL
정적 쿼리
어노테이션, XML에 정의
애플리케이션 로딩 시점에 초기화 후 재사용
애플리케이션 로딩 시점에 쿼리를 검증
> 스프링JPA에서 이 기능이 있다!
>>> 결론, 스프링JPA 쓰세요.
벌크 연산
특징
쿼리 한 번으로 여러 테이블 로우 변경(엔티티)
executeUpdate()의 결과는 영향받은 엔티티 수 반환
UPDATE, DELETE 지원
INSERT(insert into ..select, 하이버네이트 지원)
주의사항
벌크 연산은 영속성 컨텍스트를 무시하고 데이터베이스에 직접쿼리
- 첫번째.벌크 연산을 먼저 실행
- 두번째.벌크 연산 수행 후 영속성 컨텍스트 초기화
>>> 2가지 방법중에 하나를 선택해서 써야 한다.
>>> 스프링JPA 에서 @Modyfying 애노테이션으로 편하게 가능
[출처- 인프런 김영한 '자바 ORM 표준 JPA 프로그래밍- 기본편] 강의듣고 정리