JPA 15

상속관계 매핑

상속 관계 매핑 관계형 데이터베이스 (RDB)는 상속 관계가 존재하지 않는다. 슈퍼타입 서브타입 관계라는 모델링 기법이 존재하는데 이는 객체의 상속과 유사하다. 객체의 상속 구조와 DB의 슈퍼타임 서브타입의 관계를 매핑하는 것을 상속관계 매핑이라 한다. 상속관계 매핑 전략은 아래와 같다. 각 테이블로 변환 -> 조인 전략 통합테이블로 변환 -> 단일 테이블 전략 서브타입 테이블로 변환 -> 구현 클래스별 테이블 전략 JPA는 부모 객체(슈퍼타입 DB)의 클래스에 에노테이션을 통한 구조 설정이 가능하다. @Inheritance(strategy=InheritanceType.XXX) : 상속 관계 매핑 설정 JOINED: 조인 전략 SINGLE_TABLE: 단일 테이블 전략 TABLE_PER_CLASS: 구현..

JPA 2022.12.20

연관관계 매핑

연관관계 설정시 고려사항 1. 연관 관계 매핑 종류 다대일 (N:1) - @ManyToOne 일대다 (1:N) - @OneToMany 일대일 (1:1) - @OneToOne 다대다 (N:M) - @ManyToMany 2. 단방향 or 양방향 DB테이블 외래 키 하나로 양쪽을 조인하여 사용 DB에는 방향 개념이 없이 조인키로 붙힘 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조시 단방향, 양쪽 서로 참조시 양방향 3. 연관관계의 주인 양방향 연관관계를 맺을 경우 테이블은 왜래 키 하나로 두 테이블의 연관관계를 조회할 수 있지만 객체의 경우 2개의 참조가 생김 연관관계의 주인 : 왜래 키를 관리하는 참조 주인의 반대편 : 왜래 키에 영향을 주지 않는 단순 조회 다대일 단방향 보편적이고 안정적인 방식..

JPA 2022.12.20

연관관계 매핑 기초

Team에 소속된 Member라는 객체가 있다고 가정하자. Member는 하나의 팀만 가지고 있고 Team은 여러 Member가 있다고 가정하자 DB테이블을 중심으로 설계한다면 협력관계 (Meber를 통해 Team의 정보를 가져오거나 Team을 통해 Member를 가져오는 것)를 만들 수 없다. DB테이블은 왜래 키를 통한 조인으로 연관된 테이블을 붙혀 가져올수 있지만 객체는 참조를 통해 다른 객체를 찾아오기 때문이다. 이러한 이유로 객체에서는 Team객체를 직점 넣어 연관관계를 부여한다. 객체 지향 언어의 모델링 단방향 매핑 Member @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME")..

JPA 2022.12.19

영속성과 엔티티 매핑

영속성 컨텍스트 엔티티를 영구 저장하는 환경 DB를 영속성 컨텍스트라는 곳 안에 저장하는 것 영속성 켄텍스트는 논리적인 개념 엔티티매니저를 통해 영속성 컨텍스트에 접근 엔티티의 생명주기 비영속성 : 영속성 컨텍스트와 상관없는 상태 (저장할 객체를 생성한 상태) 영속 : 영속성 컨텍스트에 관리되는 상태 엔티티 매니저를 통해 객체를 넣은 상태 (저장시점 or SELECT쿼리를 통해 찾아와서 엔티티 매니저에 들어가 관리되는 경우) 커밋 전에 쿼리를 몰아두었다가 커밋되는 시점에 한번에 쿼리가 날라감. 준영속 : 영속성 컨텍스트에 저장되었다가 분리되는 상태 삭제 : 삭제된 상태 영속성 컨텍스트의 이점 1차 캐시 동일성(identity) 보장 트랜잭션을 지원하는 쓰기 지연 변경 감지 지연로딩 조회 시 1차 캐쉬에서..

JPA 2022.12.16

JAP 기본 원리 및 사용하는 이유

ORM Objrvy-trlational mapping (객체 관계 매핑) 관계형 데이터베이스와 객체지향 언어를 프레임워크가 중간에서 매핑함. 애플리케이션과 JDBC 사이에서 JPA가 ORM프레임워크로서 매핑 역할을 함 JPA의 동작위치 객체 지향 언어와 관계형데이터베이스(RDB)의 매핑 Team 이라는 객체과 Member라는 객체가 있고 Team은 Member의 부모라고 가정해보자, 이때 관계형 데이터에서는 Member라는 객체에 Team에 대한 정보를 참조하기 위해 teamId라던가 FK 값으로 참조값을 DB에 저장하게 될것이다. 이때 객체 지향 언어인 자바에서는 Member를 조회해 올때 DAO를 통해 해당 Member와 관련된 Team에 대한 객체도 함께 넣어 주어야 할 것이다. Team과 Memb..

JPA 2022.12.15