본문 바로가기

JPA24

JPA - 기본값 타입과 임베디드 타입 1. 기본값 타입 이번내용은 JAVA의 데이터 타입에 대한 간단한 내용입니다. JPA의 데이터 타입 분류 JPA 최상위 데이터를 크게 2가지로 분류한다. 1. 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 2. 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 기본값 타입 (기본적으로 공유가 되지않거나 되더라도 불변함으로 개발자가 안전하게 마음껏 사용할 수 있다.) • 자바 기본 타입(int, double) • 래퍼 클래스(Int.. 2022. 4. 12.
JPA - 영속성 전이(CASCADE)와 고아 객체 1. 영속성 전이(CASCADE) 영속성 전이는 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들도 싶을 때 사용한다. ex) 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장 ※ 참고로 영속성 전이(CASCADE)는 연관관계나, 즉시로딩(지연로딩)과 전혀 관계가 없다. ※ 엔티티를 영속화할 때 연관된 엔티티도 함께 영속화하는 편리함 을 제공할 뿐이다. 영속성 전이: 저장 public class Parent{ ... @OneToMany(mappyBy = "parent", cascade = CascadeType.ALL) private List childList = new ArrayList(); public void addChild(child child){ childList.add(.. 2022. 4. 11.
JPA - 즉시 로딩과 지연 로딩 1. 지연 로딩 (LAZY) Member를 조회할 때 Team도 함께 조회해야 할까? 단순히 member 정보만 사용하는 비즈니스 로직 println(member.getName()); 지연 로딩 LAZY을 사용해서 프록시로 조회 @Entity public class Member { @ManyToOne(fetch = FetchType.LAZY) //** @JoinColumn(name = "TEAM_ID") private Team team; ... } 이렇게하면 Member는 DB에서 가져오고 Team은 프록시 객체로 가져온다 된다. 그리고 Team을 사용하는 시점에 DB에서 가져온다. ※ getTeam()에서는 Team을 가져오지 않고, Team의 필드나 메서드를 터치했을때 초기화된다. 2. 즉시 로딩 (.. 2022. 4. 11.
JPA - @MappedSuperclass @MappedSuperclass 코드예제 @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public abstract class BaseTimeEntity{ @CreatedDate // Entity가 생성되어 저장될 때 시간이 자동 저장됩니다. private LocalDateTime createDate; @LastModifiedDate // 조회한 Entity 값을 변경할 때 시간이 자동 저장됩니다. private LocalDateTime modifiedDate; } @Entity public class Member extends BaseEntity{ ... } // JPA Auditing 활성화 @EnableJpaAudi.. 2022. 4. 10.
JPA - 상속관계 매핑 상속관계 매핑 • 관계형 데이터베이스는 상속 관계가 존재하지 않는다. • 데이터베이스의 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. • 상속관계 매핑이란 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것이다. ※ DB 설계에는 논리모델(왼쪽)이 있고 물리모델(오른쪽)이 있다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 3가지 방법 1. 각각 테이블로 변환 -> 조인 전략 (권장) 2. 통합 테이블로 변환 -> 단일 테이블 전략 (기본설정) 3. 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 (추천하지않음) ※참고로 상위 클래스는 반드시 abstract class로 만들어야한다.※ 밑에 코드예제에서는 class를 abstract로 선언하지 않았다.. 2022. 4. 10.