728x90 반응형 Dev/JPA35 [JPA] 값 타입 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 ex. 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경 시 추적 불가 ex. 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 기본값 타입 종류 자바 기본 타입 (int, double..) 래퍼 클래스 (Integer, Long...) String 특징 생명주기를 엔티티의 의존 (ex. 회원을 삭제하면 이름, 나이 필드도 함께 삭제) 값 타입은 공유하면 안된다. (ex. 회원 이름 변경 시 다른 회원의 이름도 함께 변경되면 안된다. 부작용(=.. 2021. 9. 1. [JPA] 실습 - 연관관계 관리 이전 실습에서 연관관계를 관리해보자 요구사항 글로벌 패치 전략 설정 모든 연관관계를 지연로딩으로 설정 (@ManyToOne, @OneToOne은 기본이 즉시로딩이므로 설정 변경) 영속성 전이 설정 Order -> Delivery : CascadeType.ALL 설정 Order -> OrderItem : CasecadeType.ALL 설정 실습 글로벌 패치 전략, 영속성 전이 설정 - Order.java @Entity @Table(name = "ORDERS") public class Order { @Id @GeneratedValue @Column(name = "ORDER_ID") private Long id; private LocalDateTime orderDate; @Enumerated(EnumType... 2021. 8. 27. [JPA] 프록시와 연관관계 관리 프록시 개요 '엔티티 조회 시 사용하지도 않는 정보도 같이 조회를 해야하는가?' 라는 의문이 생긴다. 예시 Member 조회 시 Team도 같이 조회해야 할까? Member와 Team 모두 사용한다면 같이 조회되는 것이 효율적이지만 Member만 사용한다면 Team을 굳이 조회할 필요는 없는 것이다. EntityManager.find() VS EntityManager.getReference() EntityManager.find() : 데이터베이스를 통해 실제 엔티티 객체 조회 EntityManager.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 (데이터베이스에 쿼리 실행되지 않는다.) 예제 - Member.java @Entity public class Memb.. 2021. 8. 27. [JPA] 실습 - 상속관계 매핑 이전 실습에서 요구사항을 추가해보자 요구사항 상품의 종류는 음반, 도서, 영화가 있고 이후 더 확장될 수 있다. 모든 데이터는 등록일과 수정일이 필수이다. 테이블 및 엔티티 설계 실습 테이블 설계 내용을 보면 단일 테이블 전략을 사용하여 구성한 것을 확인할 수 있다. 상품 종류 추가 - Item.java @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) // 단일 테이블 전략 @DiscriminatorColumn(name = "DTYPE") // 구분자 컬럼 지정 public abstract class Item { @Id @GeneratedValue @Column(name = "ITEM_ID") private Long id; private St.. 2021. 8. 25. [JPA] 고급 매핑 상속 관계 매핑 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것 객체는 상속관계가 있지만 관계형 데이터베이스는 상속 관계가 없다. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 (1) 각각 테이블로 변환 -> 조인 전략 (2) 통합 테이블로 변환 -> 단일 테이블 전략 (3) 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 주요 어노테이션 @Inheritance(strategy = InheritanceType.XXX) JOINED : 조인 전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name = ".. 2021. 8. 24. 이전 1 2 3 4 5 6 7 다음