JPA -프록시와 연관관계 관리
·
BackEnd/자바 ORM 표준 JPA 프로그래밍
프록시 Member 테이블에 username과 Team team이 존재한다고 할 때, 회원만 출력하고 싶은 경우에도 select는 team도 조회하게 된다. 이것은 큰 낭비인데 JPA는 이것을 프록시로 처리한다. 프록시 기초 em.find() : 데이터베이스를 통해서 실제 엔티티 객체를 조회한다. em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체를 조회한다. 즉, em.getReference()는 select 구문을 안하고도 값을 저장하고 있다. 프록시 특징 실제 클래스를 상속 받아서 만들어진다. 실제 클래스와 겉 모양이 같다. 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 된다.(이론상) 프록시 객체는 실제 객체의 참조를 보관한다. 프록..
실전 예제 4 - 상속관계 매핑
·
BackEnd/자바 ORM 표준 JPA 프로그래밍
실전 예제 3에서 추가 된 것 상품의 종류는 음반, 도서, 영화가 있고 이후 더 확장될 수 있다. 모든 데이터는 등록일과 수정일이 필수다. 상품 종류 확장 package jpabook.jpashop.domain; import javax.persistence.Entity; @Entity public class Album extends Item { private String artist; private String etc; ..Getter/Setter } package jpabook.jpashop.domain; import javax.persistence.Entity; @Entity public class Book extends Item{ private String author; private String ..
JPA 고급 매핑
·
BackEnd/자바 ORM 표준 JPA 프로그래밍
상속관계 매핑 관계형 데이터베이스는 상속 관계가 아니다. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑은 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑한다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법은 3가지가 존재한다. 각각 테이블로 변환 -> 조인 전략 통합 테이블로 변환 -> 단일 테이블 전략 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 조인 전략 package hellojpa; import javax.persistence.*; @Entity @Inheritance(strategy = InheritanceType.JOINED) //Item을 상속을 join으로 설정 @DiscriminatorColumn //Dtype을 추가..
실전 예제 3 - 다양한 연관관계 매핑
·
BackEnd/자바 ORM 표준 JPA 프로그래밍
실전 예제 2에서 했던 내용에 배송과 카테고리를 추가하고 다양한 연관관계 매핑을 추가한다. 다대다는 사용하지 않지만 예제이므로 사용한다고 한다. Delivery package jpabook.jpashop.domain; import javax.persistence.*; @Entity public class Delivery { @Id @GeneratedValue private int Id; @OneToOne(mappedBy = "delivery") private Order order; private String city; private String zipCode; @Enumerated(EnumType.STRING) private DeliveryStatus status; } ///// Order에 추가 @On..
JPA 다양한 연관관계 매핑
·
BackEnd/자바 ORM 표준 JPA 프로그래밍
저번 내용 정리 단방향, 양방향 테이블 : 외래 키 하나로 양쪽 조인 가능, 사실 방향이라는 개념이 없다 객체 : 참조용 필드가 있는 쪽으로만 참조 가능, 한쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향(단방향이 서로) 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다. 객체 양방향 관계는 A->B, B->A처럼 참조가 2군데이다. 객체 양방향 관계는 참조가 2군데가 있다. 둘중 테이블의 외래 키를 관리할 곳을 지정해야 한다. 연관관계의 주인은 외래 키를 관리하는 테이블이다. 주인의 반대편은 외래 키에 영향을 주지 않고 단순 조회만 가능하다. 다대일 [N:1] 다대일 단방향 가장 많이 사용하는 연관관계 다대일의 반대는 일대다이다. Member의 Team team과 Table의 ..
JPA 실전 예제2 - 연관관계 매핑 시작
·
BackEnd/자바 ORM 표준 JPA 프로그래밍
실전 예제1에서 했던 내용을 연관관계 매핑을 사용해서 다시 구현해보기 테이블 구조는 이전과 같지만 이번에는 연관 매핑이 생겼다. Member에서 order의 정보를 저장해 놓는 orders : List를 통해 가짜 매핑하는 부분을 만들었다. Members에서 Orders를 관리하도록 만든 것이다. 하지만 실제에서는 유저에서 Order를 찾는 일이 별로 없다고 한다. Order부분에서 member : Member가 Member를 진짜 매핑하는 부분이다. 이것은 왜래키이기 때문에 이곳이 진짜 매핑이다. Member를 만든 후 Order.setMember(Member)를 통해 Order에서 member를 저장 할 수 있다. Order 부분에 OrterItems를 알 수 있는 List를 구현한다. List는 양..