목록2023/08 (17)
Rootable의 개발일기
📌 페치 조인이란 JPQL에서 성능 최적화를 위해 제공하는 기능으로 SQL 조인의 종류는 아니다. 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능으로 즉시 로딩(EAGER)과 같은 효과를 보여준다. 기본 형태 select m from Member m join fetch m.team 📌 예제 회원과 팀은 다음과 같은 관계에 있다. 둘을 조인하면 아래와 같은 결과가 나온다. 위 관계에서 현재 지연 로딩이라고 할 때, 아래와 같은 코드를 실행하면 쿼리가 몇 번 나가게 될까 영속성 컨텍스트가 빈 상태에서 회원 1이 속한 팀 A를 질의한다. 회원 2는 이미 팀 A를 질의한 상태이므로 영속성 컨텍스트에서 값을 찾을 수 있다. 마지막으로 회원 3은 영속성 컨텍스트에 없으므로 다시 DB에 팀..
📌 값 타입 컬렉션(Collection Value Type) 값 타입을 하나 이상 저장할 때 사용한다. 데이터베이스는 컬렉션을 같은 테이블에 저장하지 않기 때문에, 실행하면 컬렉션을 저장하기 위한 별도의 테이블이 생성된다. 📌 사용 방법 🔎 저장 서로 다른 테이블임에도 불구하고 Member만 persist해도 함께 저장되었다. 그 이유는 값 타입은 Entity의 생명 주기에 의존하기 때문에 Entity를 저장하면 함께 저장되기 때문이다. 💡 값 타입 컬렉션은 영속성 전이 + 고아 객체 제거 기능을 필수로 가진다. 🔎 조회 값 타입 컬렉션은 기본적으로 지연 로딩 전략을 사용한다. 이렇게 지연 로딩을 사용하는 이유는 @ElementCollection의 FetchType이 LAZY가 기본으로 되어 있기 때문이..
📌 임베디드 타입(Embedded Type)이란 주로 기본 값 타입을 모아서 새로운 값 타입을 직접 정의하는 것을 말하며, 복합 값 타입이라고도 한다. 임베디드 타입을 포함한 모든 값 타입은 값 타입을 소유한 Entity에 생명 주기를 의존한다. 🔎 예제 Member 엔티티에서 날짜와 관련된 속성, 주소와 관련된 속성처럼 특정 주제와 관련된 값 타입들을 묶어 새로운 값 타입을 정의할 수 있다. 📌 사용 방법 임베디드 타입도 Proxy를 사용하기 때문에 기본 생성자가 필요하다. 더보기 임베디드 타입 Proxy Reference: https://jiwondev.tistory.com/231 JPA #9 값 타입, 컬렉션, 임베디드 타입 JPA에서는 2가지 데이터 타입을 제공한다. @Entity 는 데이터가 변..
📌 JPA의 데이터 타입 분류 🔎 엔티티 타입 @Entity로 정의하는 객체로 데이터가 변해도 식별자로 지속해서 식별/추적 가능한 타입이다. 🔎 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체를 말한다. 식별자가 없고 값만 있으므로 추적이 불가능하다. ✔ 값 타입 분류 1. 기본 값 타입 자바 기본 타입(int, double) : 생명 주기를 Entity에 의존 래퍼 클래스(Integer, Long) String 값 타입은 공유하면 안된다. 래퍼 클래스나 String 같은 특수한 클래스는 공유 가능한 객체이지만 변경은 안된다. 2. 임베디드 타입 3. 컬렉션 값 타입 📌 값 타입과 불변 객체 🔎 부작용(Side Effect) 값 타입은 항상 값을 복사해서..