Proxy
·
JPA
Entity 조회em.getReference( ) 는 JPA의 EntityManager에서 제공하는 메서드로 특정 엔티티의 프록시 객체를 반환한다. 지연 로딩(Lazy Loading)을 활용해 데이터베이스 조회를 미루고 실제로 엔티티의 속성에 접근할 때만 데이터베이스를 조회하도록 한다. Entity 조회위와 같은 연관관계를 가지는 Entity가 있다고 가정한다. tutor만 조회하는 경우Tutor findTutor = em.find(Tutor.class, 1L);String tutorName = findTutor.getName();System.out.println("tutorName = " + tutorName);tutor만 조회하는 경우 Company도 함께하기 때문에 낭비가 발생한다. 이것을 프록시를..
상속 관계 매핑
·
JPA
테이블 전략JPA에서 엔티티 상속 구조를 데이터베이스 테이블에 매핑하는 방법을 말한다. JPA는 엔티티의 상속 구조를 처리하기 위해 3가지의 테이블 전략을 제공한다. 각각의 전략을 데이터 저장 방식과 성능에 차이가 있으므로 프로젝트의 요구사항에 맞게 선택할 수 있다. 💡 참고관계형 데이터베이스의 테이블에는 상속 관계가 없다. 테이블로 클래스 상속관계 구현 방법위는 상속 관계에 있는 클래스들의 관계를 나타낸다. 이 관계를 테이블로 나타낼 수 있는 다양한 전략들에 대해 알아본다. 1. 조인 전략 각각에 대한 클래스를 테이블로 만들고 외래키로 연관관계를 구성한다. Product 테이블의 DTYPE(Book OR Coat)으로 어떤 테이블의 데이터인지 구분한다. 2. 단일 테이블 전략모든 정보를 가진 하나의 ..
N:M 연관관계
·
JPA
N:M 연관관계두 Entity가 @ManyToMany를 통해 서로 다수의 관계를 가진다. 객체와 데이터베이스의 N:M 연관관계객체객체는 Collection을 사용하여 N:M 설정이 가능하다 데이터베이스관계형 데이터베이스는 N:M 연관관계를 구현할 수 없다. 그래서 중간 테이블을 추가해서 1:N, N:1 관계로 만들어서 N:M 관계를 구현한다. N:M 단방향, 양방향코드 예시(단방향)@Entity@Table(name = "language")public class Language { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name;}@Entity@Table(name = ..
1:1 연관관계
·
JPA
1:1 단방향두 Entity가 @OneToOne 을 통해 연관 관계를 맺는 경우를 말한다. 1:1 연관관계 단방향 그림1:1은 두 entity 중 아무나 외래키의 주인이 될 수 있다.(요기서는 Tutor로 가정) 1:1은 외래 키에 유니크 제약조건이 필요하다 코드 예시@Entity@Table(name = "address")public class Address { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name;}@Entity@Table(name = "tutor")public class Tutor { @Id @GeneratedValue(strategy = G..
1:N 연관관계에서 1이 연관관계 주인일 때
·
JPA
1:N 단방향1:N 단방향이란 한 엔티티가 @OneToMany를 통해 여러 엔티티와 관계를 맺는 경우를 말한다. 이 경우 연관관계의 주인은 1에서 가지고 있다. 1:N 단방향 예시1의 Entity가 외래 키(FK)를 관리한다. ( Company entity가 연관관계의 주인이 된다) DB 입장에서는 설계상 항상 외래키가 N(Tutor) 쪽에 있어야 한다.하지만 현재 상황에서는 1(Company)이 N(Tutor)의 외래 키를 수정해야 한다. 코드 예시@Entity@Table(name = "tutor")public class Tutor { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private S..