본문 바로가기

JPA23

[JPA] 값 타입 JPA의 데이터 타입 (1) 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능하다. ex) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 (2) 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경 시 추적 불가능하다. ex) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입의 종류 기본값 타입 (basic value type) 자바 기본 타입 (ex. int, double) Wrapper Class (ex. Integer) String 임베디드 타입 (embedded type) 컬렉션 값 타입 (collection value type) 1. 기본값 타입 @E.. 2022. 1. 4.
[JPA] 영속성 전이(CASCADE)와 고아 객체 제거 1. 영속성 전이 : CASCADE 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만든다. (1) 영속성 전이 : 저장 @Entity @Getter @Setter public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST) private List childList = new ArrayList(); public void addChild(Child child) { childList.add(child); child.setParent(this); } } cascade = CascadeType.AL.. 2022. 1. 3.
[JPA] 즉시 로딩과 지연 로딩 1. 즉시 로딩 (EAGER Loading) 엔티티를 조회할 때 연관된 엔티티도 함께 조회한다. @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String name; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "TEAM_ID") private Team team; } @ManyToOne (fetch = FetchType.EAGER) 지정함으로써 즉시 로딩 선언 //즉시 로딩 Member findMember = em.find(Member.cl.. 2022. 1. 3.
[JPA] 프록시 (Proxy) 1. 프록시의 필요성 엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다. Member findMember = em.find(Member.class, member.getId()); System.out.println(findMember.getName()); //System.out.println(findMember.getTeam().getName()); 만약 회원 엔티티만 출력하는 사용하는 경우 em.find()로 회원 엔티티를 조회할 때 회원과 연관된 팀 엔티티까지 데이터베이스에서 함께 조회해 두는 것은 효율적이지 않다. JPA는 이런 문제를 해결하려고 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 제공하는데 이것을 지연 로딩이라 한다. 지연 로딩 기능을 사용하려면 실제 엔티.. 2022. 1. 3.
[JPA] @MappedSuperclass @MappedSuperclass 테이블과 매핑하지 않고 단순히 매핑 정보를 상속할 때 사용된다. 상속관계 매핑이 아니다. 엔티티가 아니고 테이블과 매핑되지 않는다. 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공한다. @MappedSuperclass @Getter @Setter public abstract class BaseEntity { private String createdBy; private LocalDateTime createdDate; private String lastModifiedBy; private LocalDateTime lastModifiedDate; } @Entity @Getter @Setter public class Member extends BaseEntity{ @Id .. 2022. 1. 3.
[JPA] 상속 관계 매핑 1. 상속 관계 매핑 객체의 상속과 DB의 슈퍼타입 서브타입 관계를 매핑하는 것 관계형 데이터베이스에는 객체지향 언어에서 다루는 상속이라는 개념이 없다. 대신 슈퍼타입 서브타입 관계(Super-Type Sub-Type Relationship)이라는 모델링 기법이 객체의 상속 개념과 가장 유사하다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현할 때는 3가지 방법을 선택할 수 있다. 각각 테이블로 변환 -> 조인 전략 통합 테이블로 변환 -> 단일 테이블 전략 서브타입 테이블로 변화 -> 구현 클래스마다 테이블 전략 2. 조인 전략 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본 키 + 외래 키로 사용하는 전략이다. 조회할 때 조인을 사용해야 한다. .. 2022. 1. 3.
반응형