JPA 데이터 타입은 크게 2종류이다.(엔티티타입, 값타입) 엔티티 타입(식별자를 통해 지속해서 추적 가능) @Entitiy로 정의하는 객체 값 타입(식별자가 없고 숫나나 문자같은 속성만 있으므로 추적 불가능) 기본값 타입 - 자바 기본 타입(int, double) - 래퍼 클래스(Integer) - String 임베디드 타입(복합 값 타입) 컬렉션 값 타입 비유를 하자면 엔티티 타입은 생물이고, 값 타입은 단순히 수치 정보다. 1. 기본값 타입 위에서 String, int가 값 타입이다. id라는 식별자 값도 가지고 생명주기도 있지만 name, age속성은 식별자 값도 생명주기도 회원 엔티티에 의존한다.따라서 회원 엔티티 인스턴스를 제거하면 name, age값도 제거된다. 2. 임베디드 타입(복합 값 ..
1. 프록시 위 회원 정보만 출력하는 로직에서 em.find()로 회원 엔티티를 조회할 때 회원과 연관된 팀 엔티티까지 DB에서 함께 조회해 두는 것은 효율적이지 않다. JPA는 이런 문제를 해결하려고 엔티티가 실제 사용될때까지 DB 조회를 지연하는 방법을 제공하는데 이것을 지연 로딩이라고 한다. 그런데 지연 로딩을 사용하려면 실제 엔티티 객체 대신에 DB조회를 지연할 수 있는 가짜 객체가 필요한데 이것을 프록시 객체라 한다. 프록시 기초 JPA에서 식별자로 엔티티 하나를 조회할 때는 EntityManager.find()를 사용한다. 이 메서드는 영속성 컨텍스트에 엔티티가 없으면 DB를 조회한다. 이렇게 조회하면 엔티티를 실제 사용하든 사용하지 않든 DB를 조회하게 된다. 엔티티를 실제 사용하는 시점까지..
1. 상속 관계 매핑 관계형 DB는 상속 개념이 없다. - 슈퍼타입 서브타입 논리 모델을 실제 테이블로 구현하는 방법 각각의 테이블로 변환 : 모두 테이블로 만들고 조회할 때 조인을 사용(조인 전략) 통합 테이블로 변환 : 테이블을 하나만 사용해서 통합 (단일 테이블 전략) 서브타입 테이블로 변환 : 서브 타입마다 하나의 테이블을 만든다 (구현 클래스마다 테이블 전략) 조인 전략 기본키 + 외래 키로 사용하는 전략이다. 따라서 조회할 때 조인을 자주 사용한다. 하지만 테이블은 타입 개념이 없으므로 타입을 구분하는 컬럼을 추가해야 한다. ① : 상속 매핑은 부모 클래스에 @Inheritance를 사용한다. 그리고 매핑 전략을 지정해야 하는데 여기서는 조인 전략을 사용하므로 InheritanceType.JO..
1. 다대일 DB 테이블의 1 : N 관계에서 외래 키는 항상 다 쪽에 있다. 예를 들어 회원(N)과 팀(1)이 있으면 회원 쪽이 연관관계의 주인이다. 다대일 단방향 [N : 1] 다대일 단방향 연관관계이다. Member.team 필드로 회원 테이블의 TEAM_ID 외래 키를 관리한다. 다대일 양방향 [N : 1 , 1 : N] 실선이 주인이고 점선은 주인이 아니다. 양방향은 외래 키가 있는 쪽이 연관관계의 주인이다. 양방향 연관관계는 항상 서로를 참조해야 한다. 2. 일대다 일대다 관계는 엔티티를 하나 이상 참조할 수 있으므로 자바 컬렉션인 Collection, List, Set, Map 중에 하나를 사용해야 한다. 일대다 단방향 [1 : N] 일대다 단방향 관계를 매핑할 때는 @JoinColumn을 ..