
해당 시리즈는 김영한님의 JPA 로드맵을 따라 학습하면서 내용을 정리하는 글입니다
SELECT m.username -> 상태 필드
FROM Member m
JOIN m.team t -> 단일 값 연관 필드
JOIN m.orders o -> 컬렉션 값 연관 필드
WHERE t.name = '팀A'
@ManyToOne, @OneToOne, 대상이 엔티티@OneToMany, @ManyToMany, 대상이 컬렉션JPQL: SELECT o.member FROM Order oSQL: SELECT m.* FROM Orders o Inner JOIN Member m on o.member_id = m.idJOIN 키워드 직접 사용SELECT m FROM Member m JOIN m.team tSQL 조인 발생(내부 조인만 가능)SELECT m.team FROM Member mSELECT, WHERE 절에서 사용하지만 묵시적 조인으로 인해 SQL의 FROM(JOIN) 절에 영향을 줌SQL 튜닝에 중요한 포인트SQL 조인의 종류가 아닙니다JPQL에서 성능 최적화를 위해서 제공하는 기능입니다JOIN FETCH 명령어를 사용합니다[LEFT | INNER] JOIN FETCH 조인경로SQL을 보면 회원 뿐만 아니라 팀(T.*)도 함께 SELECTSELECT m FROM Member m JOIN FETCH m.teamSELECT M.*, T.* FROM Member m INNER JOIN Team t ON m.TEAM_ID = t.idSELECT t
FROM Team t JOIN FETCH t.members
WHERE t.name = '팀A'
SELECT t.*, m.*
FROM Team t
INNNER JOIN Member m ON T.id = m.TEAM_ID
WHERE t.name = '팀A'
SQL의 DISTINCT는 중복된 결과를 제거하는 명령JPQL의 DISTINCT는 2가지 기능을 제공합니다SQL에 DISTINCT를 추가SELECT DISTINCT t
FROM Team t JOIN FETCH t.members
WHERE t.name = '팀A'
SQL 한 번으로 조회가능합니다 - 성능 최적화@OneToMany(fetch = FetchType.LAZY)DTO로 반환하는 것이 효과적입니다Item 중에 Book, Movie를 조회해라SELECT i FROM Item i
WHERE type(i) IN (Book, Movie)
SELECT i FROM Item i
WHERE i.DTYPE in ('B', 'M')
FROM, WHERE, SELECT(하이버네이트 지원) 사용Item과 자식 BookSELECT i FROM Item i
WHERE TREAT(i as Book).author = 'kim'
SELECT i.* FROM Item i
WHERE i.DTYPE = 'B' and i.author = 'kim'
JPQL에서 엔티티를 직접 사용하면 SQL에서 해당 엔티티의 기본 키 값을 사용합니다SELECT COUNT(m.id) FROM Member m //엔티티의 아이디를 사용
SELECT COUNT(m) FROM Member m //엔티티를 직접 사용
SELECT COUNT(m.id) AS cnt FROM Member m
JPQLXML에 정의XML이 항상 우선권을 가집니다XML을 배포할 수 있습니다JPA 변경 감지 기능으로 실행하려면 너무 많은 쿼리가 실행되게 됩니다UPDATE SQL이 실행됩니다String qlString = "UPDATE Product p " +
"SET p.price = p.price * 1.1 " +
"WHERE p.stockAmount < :stockAmount";
int resultCount = em.createQuery(qlString)
.setParameter("stockAmount", 10)
.executeUpdate();