JPA

    값 타입

    값 타입

    목차 기본값 타입 임베디드 타입(복합 값 타입) 값 타입과 불변 객체 값 타입의 비교 값 타입 컬렉션 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 -> 내부 데이터가 변해도 추적이 가능하다 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 분류 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입(embedded type, 복합 값 타입) 컬렌션 값 타..

    프록시

    프록시

    목차 프록시 즉시 로딩과 지연 로딩 지연 로딩 활용 영속성 전이 : CASCADE 고아 객체 영속성 전이 + 고아 객체, 생명주기 프록시 프록시에 대해 설명하기 전에, 이 기술이 나오게 된 배경을 알아보자 Member와 Team이 연관 관계 되어있다고 했을 때, Member를 조회할 때 Team도 함께 조회 해야할까? 비즈니스 로직에 따라서는 Member만 조회하는 경우가 있을 것이다. 즉, Team까지 조회 할 필요가 없을 때 다 같이 조회하는거는 낭비다. 이를 지연로딩과 프록시라는 개념으로 해결할 수 있다. 프록시 기초 지연 로딩을 이해하기 위해서는 프록시 개념에 대한 이해가 필요하다. JPA에서는 em.find() 와 em.getReference() 메소드를 제공한다. em.getReference(..

    고급 매핑

    고급 매핑

    목차 상속 관계 매핑 @MappedSuperclass 실전 예제 - 4. 상속관계 매핑 상속관계 매핑 객체는 상속관계 존재 O, 관계형 데이터베이스는 상속 관계 존재X 그나마 슈퍼타입 서브타임 관계라는 모델링 기법이 객체 상속과 유사 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 객체는 상속을 지원하므로 모델링과 구현이 같지만, DB는 상속을 지원하지 않기 때문에 논리 모델을 물리 모델로 구현할 방법이 필요하다. 구현 방법 주요 어노테이션 @Inheritance(stategy=InheritanceType.xxxx)의 stategy를 부모 클래스에서 설정해주면 됨 InheritanceType 종류 JOINED SI..

    다양한 연관관계 매핑

    다양한 연관관계 매핑

    목차 연관관계 매핑시 고려사항 3가지 다대일 [N:1] 일대다 [1:N] 일대일 [1:1] 다대다 [N:M] 연관관계 매핑시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 주인 다중성 JPA에서는 다중성을 위한 다양한 어노테이션 제공 이는 DB와 매핑하기 위해 존재 그래서 데이터베이스 관점에서 다중성을 기준으로 고민 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany (실무에서 사용하면 안됨) 다중성을 고민하다가 풀리지 않으면 대칭성을 고려하자. 다중성의 관계들은 대칭성을 다 가지고 있다. ex) 회원과 팀 - 팀과 회원 둘다를 고려하면 쉬워 진다. 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향이라는 개념이 없음..

    연관관계 매핑 기초

    연관관계 매핑 기초

    연관관계가 필요한 이유 -객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다. - 조영호(객체지향의 사실과 오해) 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계다. 객체를 테이블에 맞추어 모델링..(연관관계가 없는 객체) 연관 관계가 없는 객체, 참조 대신에 외래 키를 그대로 사용 /** * @Entity를 무조건 넣어야됨 * -> 로딩할 때, JPA를 사용하는 애라고 인식하여 관리하기 시작 */ @Entity @Getter @Setter public class Member { /** * @Id -> PK */ @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Colu..

    엔티티 매핑

    엔티티 매핑

    객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn @Entity @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 주의 기본 생성자 필수(피라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스 사용 x 지정할 필드에 final 사용 X @Entity 속성 정리 속성 : name JPA에서 사용할 엔티티 이름을 지정한다. 기본값 : 클래스 이름을 그대로 사용(예: Member) 같은 클래스 이름이 없으면 가급적 기본값을 사용한다. @Tab..

    영속성 관리

    영속성 관리

    영속성 관리 JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기 영속성 컨텍스트 - jpa가 실제 내부에서 동작하는 방식과 관련 영속성 컨텍스트 "엔티티를 영구 저장하는 환경" 이라는 뜻 ex) EntityManager.persist(entity); -> DB에 저장하는 것이 아닌, 영속성 컨텍스트를 통해 entity를 영속화 시킴 엔티티의 생명주기 비영속(new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 영속(managed) 영속성 컨텍스트에 관리되는 상태 준영속(detached) 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제(removed) 삭제된 상태 비영속 영속 준영속, 삭제 영속성 컨텍스트의 이점 1차 캐시 동일성 보장 트랜잭션을 지원하는 쓰기 지연 변경..