상속 관계 매핑ORM에서 이야기하는 상속 관계 매핑은 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현하는 3가지 방법1) 각각의 테이블로 변환 (조인 전략) : 각각을 모두 테이블로 만들고 조회할 때 조인을 사용2) 통합 테이블로 변환 (단일 테이블 전략) : 테이블을 하나만 사용해서 통합3) 서브타입 테이블로 변환 (구현 클래스마다 테이블 전략) : 서브 타입마다 하나의 테이블을 생성조인 전략엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본 키 + 외래 키로 사용하는 전략조회할 때 조인을 자주 사용객체는 타입으로 구분할 수 있지만 테이블은 타입의 개념이 없으므로 타입을 구분하는 컬럼..
다양한 연관관계 매핑 요구사항 추가 상품을 주문할 때 배송 정보를 입력할 수 있으므로 주문과 배송은 일대일 관계 상품을 카테고리로 구분할 수 있음 ERD 분석 주문과 배송 : 주문과 배송은 일대일 관계, 외래 키는 주문 테이블에 존재 상품과 카테고리 : 한 상품은 여러 카테고리에 속할 수 있고, 한 카테고리도 여러 상품을 가지므로 다대다 관계이지만, 다대다 관계를 표현하기 어려우므로 CATEGORY_ITEM 연결 테이블을 추가해서 일대다, 다대다 관계로 풀어냄 일대일 매핑 주문과 배송의 관계 Order와 Delivery는 일대일 관계 @Entity @Table(name = "ORDERS") public class Order { // 주문 엔티티 @Id @GeneratedValue @Column(name ..
다양한 연관관계 매핑엔티티의 연관관계를 매핑할 때는 3가지를 고려다중성다대일(@ManyToOne), 일대다(@OneToMany), 일대일(@OneToOne), 다대다(@ManyToMany)단방향, 양방향테이블은 외래 키 하나로 조인을 사용해서 양방향으로 쿼리가 가능하므로 사실상 방향이라는 개념이 없음반면에 객체는 참조용 필드를 가지고 있는 객체만 연관된 객체를 조회할 수 있음객체 관계에서 한쪽만 참조하는 단방향 관계, 서로 참조하는 양방향 관계연관관계의 주인데이터베이스는 외래 키 하나로 두 테이블이 연관관계를 맺으므로 연관관계를 관리하는 포인트는 외래 키 하나반면 객체는 엔티티를 양방향으로 매핑하면 2곳에서 서로를 참조하므로 객체의 연관관계를 관리하는 포인트는 둘JPA는 두 객체 연관관계 중 하나를 정해..
연관관계 매핑 시작 엔티티 매핑 - 실전 예제에서는 외래 키를 그대로 가져오는 문제가 있었으므로, 엔티티에서 외래 키로 사용한 필드는 제거하고 참조를 사용하도록 변경 즉, 객체 관계를 외래 키를 직접 사용하는 것에서 참조를 사용하도록 변경 일대다, 다대일 연관관계 매핑 @Entity public class Member { // 회원 엔티티 @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String name; private String city; private String street; private String zipcode; // 연관관계의 주인이 아닌 Member.orders에 @mappedBy 선언을 하여 연관관계의..
객체의 참조와 테이블의 외래 키 매핑 엔티티들은 대부분 다른 엔티티와 연관관계가 있음 그런데 객체는 참조(주소)를 사용해서 관계를 맺고 테이블은 외래 키를 사용해서 관계를 맺으므로 완전히 다른 특징을 가지므로 객체의 참조와 테이블의 외래 키를 매핑하는 것이 중요 연관관계 방향 : [단방향, 양방행] 한쪽만 참조하는 단방향 관계, 서로 참조하는 양방향 관계 방향은 객체관계에만 존재하고 테이블 관계는 항상 양방향 다중성 : [다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:N)] 여러 회원이 한 팀에 속할 때는 다대일 관계, 한 팀에 여러 회원이 소속될 때는 일대다 관계 연관관계의 주인 : 객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해야 함 단방향 연관관계 다대일 단방향 관계 다대일..
요구사항 분석과 기본 매핑 작은 쇼핑몰을 만들어가면서 JPA로 실제 도메인 모델을 어떻게 구성하고 객체와 테이블을 어떻게 매핑해야 하는지 알아보자 요구사항 분석 핵심 요구사항 회원은 상품을 주문할 수 있다. 주문 시 여러 종류의 상품을 선택할 수 있다. 회원 기능 회원 등록 회원 조회 상품 기능 상품 등록 상품 수정 상품 조회 주문 기능 상품 주문 주문 내역 조회 주문 취소 도메인 모델 분석 회원, 주문, 상품, 그리고 주문상품이라는 엔티티가 도출 회원과 주문의 관계 : 회원은 여러 번 주문할 수 있으므로 회원과 주문은 일대다 관계 주문과 상품의 관계 : 주문을 할 때 여러 상품을 함께 선택할 수 있고, 같은 상품도 여러 번 주문될 수 있으므로 다대다 관계 하지만 다대다 관계는 거의 사용하지 않으므로 주..
@EntityJPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야하며@Entity가 붙은 클래스는 JPA가 관리하며, 엔티티라고 부름@Entity 속성1) name : JPA에서 사용할 엔티티 이름을 지정하며, 기본값은 클래스 이름을 그대로 사용하므로 충돌되지 않도록 주의@Entity 적용 시 주의 사항1) 기본 생성자는 필수이며 하나도 없다면 자동으로 생성 (파라미터가 없는 public 또는 protected 생성자)2) final, enum, interface, inner 클래스에는 사용 불가3) 저장할 필드에 final을 사용하면 안 됨public Member() {} // 자동으로 생성된 기본 생성자// ================= //public Member()..
엔티티 매니저 팩토리와 엔티티 매니저엔티티 매니저 팩토리는 엔티티 매니저를 만드는 공장으로,여러 스레드가 동시에 접근해도 안전하므로 서로 다른 스레드 간에 공유 가능엔티티 매니저란 엔티티를 관리하는 관리자로, 엔티티를 저장, 수정, 삭제, 조회하는 등 엔티티와 관련된 모든 일을 처리하며여러 스레드가 동시에 접근하면 동시성 문제가 발생하므로 스레드 간에 절대 공유 금지데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 엔티티 매니저 팩토리를 하나만 생성이후 필요할 때마다 엔티티 매니저 팩토리에서 엔티티 매니저를 생성// JpaMain.java// META-INT/persistence.xml에 있는 정보를 바탕으로 엔티티 매니저 팩토리 생성// 공장 만들기, 비용이 아주 많이 듦EntityManagerF..