JPA
-
연관관계 매핑 기초 - 실전예제김영한(인프런 강의)/자바 ORM 표준 JPA 프로그래밍 2020. 10. 19. 13:12
실습 1. 관계도 2. ERD 3. 엔티티 상세 4. 참고사항 1) 테이블의 N:M 관계는 중간 테이블을 이용해서 1:N, N:1 2) 실전에서는 중간 테이블이 단순하지 않다. 3) @ManyToMany는 제약: 필드 추가X, 엔티티 테이블 불일치 4) 실전에서는 @ManyToMany 사용X 5. 코드 @Entity public class Category { @Id @GeneratedValue private Long id; private String name; @ManyToOne @JoinColumn(name = "PARENT_ID") private Category parent; @OneToMany(mappedBy = "parent") private List child = new ArrayList(); ..
-
다양한 연관관계 매핑김영한(인프런 강의)/자바 ORM 표준 JPA 프로그래밍 2020. 10. 19. 12:04
연관관계 매핑 시 중요한 3가지 1. 다중성 1) 다대일 - @ManyToOne 2) 일대다 - @OneToMany 3) 일대일 - @OneToOne 4) 다대다 - @ManyToMany 5) 다대일의 반대는 일대다, 일대일의 반대는 일대일, 다대다의 반대는 다대다처럼 대칭을 이룬다. 2. 단방향, 양방향 1) 테이블 - 외래 키 하나로 양쪽 조인 가능 - 사실 방향이라는 개념이 없음 2) 객체 - 참조용 필드가 있는 쪽으로만 참조 가능 - 한쪽만 참조하면 단방향 - 양쪽이 서로 참조하면 양방향 3. 연관관계의 주인 1) 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 2) 객체 양방향 관계는 A->B, B->A 처럼 참조가 2개라 둘 중 테이블의 외래키를 관리할 곳을 지정해야함 4) 연관관계의 주..
-
연관관계 매핑 기초 - 실습김영한(인프런 강의)/자바 ORM 표준 JPA 프로그래밍 2020. 10. 8. 15:45
테이블 구조 객체 구조 코드 @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String name; private int age; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; @OneToMany @JoinColumn(name = "member") private List orders = new ArrayList(); Getter(), Setter() ... } @Entity @Table(name = "ORDERS") public class Order { @Id @..
-
연관관계 매핑 기초 - 양방향 연관관계김영한(인프런 강의)/자바 ORM 표준 JPA 프로그래밍 2020. 10. 7. 15:30
객체와 테이블이 관계를 맺는 관계 1. 양방향 객체 연관관계 1) 객체의 양방향 관계는 사실 양방향 관계가 아니라 서로 다른 단 뱡향 관계 2개다. 2) 객체를 양방향으로 참조하려면 단방향 연관관계를 2개 만들어 야 한다. - A -> B (a.getB()) - B -> A (b.getA()) class A { B b; } class B { A a; } 2. 테이블 연관관계 1) 테이블은 외래 키 하나로 두 테이블의 연관관계를 관리 2) MEMBER.TEAM_ID 외래 키 하나로 양방향 연관관계 가짐 (양쪽으로 조인할 수 있다.) - 아래와 테이블 관계처럼 둘중 하나로 왜래 키를 관리해야 한다. SELECT * FROM MEMBER M JOIN TEAM T ON M.TEAM_ID = T.TEAM_ID S..
-
연관관계 매핑 기초 - 단방향 연관관계김영한(인프런 강의)/자바 ORM 표준 JPA 프로그래밍 2020. 10. 7. 13:19
연관관계를 왜 만드는가? 객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다. – 조영호(객체지향의 사실과 오해) 예상 시나리오 1) 회원과 팀이 있다. 2) 회원은 하나의 팀에만 소속될 수 있다. 3) 회원과 팀은 다대일 관계다. 연관관계 없는 객체 모델링 1. 연관관계(연관관계 없음) 2. 특징 1) 객체를 테이블에 맞추어 모델링을 해야 한다. - 참조 대신에 외래 키를 그대로 사용 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @Column(name = "TEAM_ID") private Long teamId; Getter()..
-
엔티티 매핑 - 실습 예제를 통한 데이터 중심 설계의 문제점김영한(인프런 강의)/자바 ORM 표준 JPA 프로그래밍 2020. 10. 5. 16:36
요구 사항 1) 회원은 상품을 주문할 수 있다. 2) 주문 시 여러 종류의 상품을 선택할 수 있다. 기능 목록 회원 기능 회원등록 회원조회 상품 기능 상품등록 상품수정 상품조회 주문 기능 상품주문 주문내역조회 주문취소 도메인 모델 분석 1) 회원과 주문의 관계 - 회원은 여러 번 주문할 수 있다. (일대다) 2) 주문과 상품의 관계 - 주문할 때 여러 상품을 선택할 수 있다. 반 대로 같은 상품도 여러 번 주문될 수 있다. 주문상품 이라는 모델 을 만들어서 다대다 관계를 일다대, 다대일 관계로 풀어냄 테이블 설계 엔티티 설계와 매핑 데이터 중심 설계의 문제점 1) 위의 방식은 객체 설계를 테이블 설계에 맞춘 방식 2) 테이블의 외래키를 객체에 그대로 가져옴 3) 객체 그래프 탐색이 불가능 4) 참조가 없..
-
엔티티 매핑 - 기본키 매핑김영한(인프런 강의)/자바 ORM 표준 JPA 프로그래밍 2020. 10. 5. 12:20
기본 키 매핑방법 1. 직접할당(@ID) @Id private Long id; 2. 자동생성(@GeneratedValue) @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; 속성 이름 IDENTITY 데이터베이스에 위임(자동할당), MYSQL SEQUENCE 데이터베이스 시퀀스 오브젝트 사용, ORACLE - @SequenceGenerator 필요 TABLE 키 생성용 테이블 사용, 모든 DB에서 사용 - @TableGenerator 필요 AUTO 방언에 따라 자동 지정, 기본값 기본적인 자동생성 속성은 위와같으며 자세히 알아보자 자동생성 속성 특징 1. IDENTITY 전략 @Entity public class Member { @..
-
엔티티 매핑 - 필드와 컬럼 매핑김영한(인프런 강의)/자바 ORM 표준 JPA 프로그래밍 2020. 10. 2. 13:33
매핑 어노테이션 정리 아래와같이 auto 옵션을 설정 어노테이션 설명 @Column 컬럼 매핑 @Temporal 날짜 타입 매핑 @Enumerated enum 타입 매핑 @Lob BLOB, CLOB 매핑 @Transient 특정 필드를 컬럼에 매핑하지 않음(매핑 무시) @Column 속성 설명 기본값 name 필드와 매핑할 테이블의 컬럼 이름 객체의 필드 이름 insertable, updatable 등록, 변경 가능 여부 TRUE nullable(DDL) null 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성 시에 not null 제약조건이 붙는다. unique(DDL) @Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제 약조건을 걸 때 사용한다. colu..