JPA 시작하기
JPA 프로젝트에 필요한 라이브러리와 persistence.xml 설정, Persistence에서 EntityManager까지 이어지는 구동 방식, 트랜잭션 안에서 회원을 저장하는 기본 동작과 JPQL 사용법을 정리합니다.
JPA 프로젝트에 필요한 라이브러리와 persistence.xml 설정, Persistence에서 EntityManager까지 이어지는 구동 방식, 트랜잭션 안에서 회원을 저장하는 기본 동작과 JPQL 사용법을 정리합니다.
엔티티의 생명주기와 영속성 컨텍스트가 제공하는 1차 캐시, 동일성 보장, 쓰기 지연, 변경 감지, 그리고 플러시가 호출되는 시점과 플러시 모드, 준영속 상태를 예제로 정리합니다.
@Entity, @Table, @Column 등 엔티티와 테이블을 매핑하는 어노테이션과 스키마 자동 생성 옵션, IDENTITY·SEQUENCE·TABLE 기본 키 생성 전략과 SEQUENCE 최적화를 정리합니다.
테이블의 외래 키와 객체의 참조가 어떻게 다른지 회원·팀 예제로 비교하고, 단방향·양방향 매핑과 외래 키를 관리하는 연관관계의 주인을 정하는 기준을 정리합니다.
다대일·일대다·일대일 연관관계를 단방향과 양방향으로 매핑하는 방법과, 외래 키 위치에 따라 달라지는 각 방식의 장단점을 정리합니다.
객체의 상속 구조를 테이블로 옮기는 조인·단일 테이블·구현 클래스마다 테이블 전략의 테이블 구조와 장단점을 비교하고, 공통 매핑 정보를 모으는 @MappedSuperclass의 쓰임을 정리합니다.
em.find()와 em.getReference()의 차이, 프록시 객체가 영속성 컨텍스트를 통해 초기화되는 과정, 프록시를 사용할 때 주의할 점과 확인 방법을 예제로 정리합니다.
FetchType.LAZY와 FetchType.EAGER로 연관된 Team을 조회하는 시점이 어떻게 달라지는지 프록시 관점에서 정리하고, 즉시 로딩이 일으키는 N+1 문제와 실무에서 지연 로딩을 쓰는 이유를 짚습니다.
CASCADE 옵션으로 부모와 자식 엔티티를 함께 영속화하는 방법과 사용하는 경우, orphanRemoval로 고아 객체를 제거하는 원리, 두 옵션을 함께 써서 자식의 생명주기를 관리하는 방법을 정리합니다.
JPA의 엔티티 타입과 값 타입의 차이, 기본값 타입의 특징, 임베디드 타입을 정의하고 테이블에 매핑하는 방법, @AttributeOverride로 컬럼명을 재정의하는 방법을 정리합니다.
임베디드 값 타입을 여러 엔티티가 공유할 때 생기는 부작용과 불변 객체 설계, 값 타입 컬렉션의 제약과 이를 일대다 엔티티로 대체하는 방법을 정리합니다.
JPQL의 기본 문법과 TypedQuery, 파라미터 바인딩, 프로젝션, 페이징, 조인, 서브쿼리, CASE 식 등 자주 쓰는 문법을 정리합니다.
JPQL 경로 표현식에서 명시적 조인과 묵시적 조인의 차이를 정리하고, 페치 조인의 동작 방식과 일반 조인과의 차이, DISTINCT·페이징 관련 한계를 설명합니다.