본문 바로가기

JPA 프로그래밍

(15)
[자바 ORM 표준 JPA 프로그래밍] 고급 매핑 - 상속관계 매핑( 1/3 ) 상속관계 매핑 관계형 데이터베이스는 상속 관계X 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 상속관계 매핑 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 객체는 상속관계로 가져갈 수 있다. 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXXX) JOINED : 조인 전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name="DTYPE") 부모 클래스에서 선언 이 어노테이션을 안 넣어 줄 경우에 기능상으로 문제는 없다. 그러나 DB만 봤을 경우 어떤 테이블(어떤 자식 객체)에서 INSERT가 되었는지 바로 확인할 수가 없다. 여러 테이블들과 ..
[자바 ORM 표준 JPA 프로그래밍] 실전 예제3 - 다양한 연관관계 매핑( 4/4 ) - 배송, 카테고리 추가 1. 엔티티 주문과 배송은 1:1( @OneToMany ) 상품과 카테고리는 N:M( @ManyToMany ) 2. ERD 다대다( N:M )연관관계를 추천하지는 않지만 예제를 보여주기 위해서 'CATEGORT_ITEM' 테이블을 생성했습니다. 3. 엔티티 - N:M 관계는 1:N, N:1로 테이블의 N:M 관계는 중간 테이블을 이용해서 1:N, N:1으로 변경해야한다. 실무에서는 중간 테이블이 단순하지 않다. @ManyToMany는 제약 필드 추가 X 엔티티 테이블 불일치 실무에서는 @MaynToMany 사용 X - 테이블이 올바르게 생성되지 않을 경우 기존 테이블들 삭제 DROP TABLE IF EXISTS ORDERS CASCADE; DROP TABLE IF EXISTS I..
[자바 ORM 표준 JPA 프로그래밍] 다양한 연관관계 매핑 - 다대다( 3/4 ) 1. 다대다 [ N : M ] 실무에서는 쓰면 안된다고 합니다. 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없음 연결 테이블을 추가해서 일대다, 다대다 관계로 풀어내야함 테이블 객체 객체는 컬렉션을 사용해서 객체 2개로 다대다 관계 가능 @ManyToMany 사용 @JoinTable로 연결 테이블 지정 다대다 매핑 단방향, 양방향 가능 - 다대다 매핑의 한계 편리해 보이지만 실무에서 사용 X 연결 테이블이 단순히 연결만 하고 끝나지 않음 주문시간, 수량 같은 데이터가 들어올 수 있음 - 다대다 매핑의 한계 극복 연결 테이블용 엔티티 추가( 연결 테이블을 엔티티로 승격 ) @ManyToMany -> @OneToMany, @ManyToOne '다대다 매핑의 한계' 사진처럼 'MEM..
[자바 ORM 표준 JPA 프로그래밍] 다양한 연관관계 매핑 - 일대일( 2/4 ) 1. 일대일 [ 1 : 1 ] 일대일 관계는 그 반대도 일대일 주 테이블이나 대상 테이블 중에 외래 키 선택 가능 주 테이블에 외래 키 대상 테이블에 외래 키 외래 키에 데이터베이스 유니크( UNI ) 제약조건 추가 비즈니스 룰 한 회원은 하나의 락커만 가질 수 있다. 1) 일대일 : 주 테이블에 외래 키 단방향 다대일( @ManyToOne ) 단방향 매핑과 유사 - Member @Getter @Setter @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String..
[자바 ORM 표준 JPA 프로그래밍] 다양한 연관관계 매핑 - 다대일, 일대다 ( 1/4 ) - 연관관계 매핑시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 주인 - 다중성 데이터베이스 관점에서 매핑하기 위한 어노테이션 이다. 대칭성이 있으므로 역으로 생각하면 편하다. 다대다 @ManyToOne 일대다 @OneToMany 일대일 @OneToOne 다대다 @ManyToMany 실무에서 쓰면 안된다. - 단방향, 양방향 테이블 외래 키는 하나로 양쪽 조인 가능 사실 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 사실 양방향이라는건 없다. 단방향이 두개가 있는 것이다. - 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A -> B, B -> A 처럼 참조가 2군데 객체 양방향 관계..
[자바 ORM 표준 JPA 프로그래밍] 실전 예제2 - 연관관계 매핑 시작( 3/3 ) - 실전예제 1에 이어서 진행 https://github.com/oss0202/jpashop oss0202/jpashop Contribute to oss0202/jpashop development by creating an account on GitHub. github.com - 테이블 구조 실전예제1과 테이블 구조는 동일 외래키(FK)가 있는 테이블이 연관관계 주인 - 객체 구조 참조를 사용하도록 변경 - 단방향 매핑 진행 객체 입장에서는 무조건 단방향이 좋다. 양방향일 경우 신경쓸 부분이 많아진다. - Order, OrderItem 수정 외래키가 있으므로 연관관계의 주인 // Order.java // 이전 @Column(name = "MEMBER_ID") private Long memberId; //..
[자바 ORM 표준 JPA 프로그래밍] 연관관계 매핑 기초 - 양방향 연관관계 와 연관관계의 주인( 2/3 ) ※ 이 강의에서 아래의 두가지가 제일 중요하다고 합니다. 영속성 컨텍스트 메커니즘 양방향 연관관계와 연관관계의 주인 메뉴얼에 있는 기능만 쓰지 말고 잘 알고 넘어가야 합니다. 테이블은 단방향과 양방향은 차이가 없습니다. 테이블의 경우에는 TEAM_ID를 알고 있으면 MEMBER, TEAM의 정보를 다 알 수 있다. 그러나 이전의 단방향의 경우에는 TEAM에서 MEMBER에 대한 정보(ex. username)를 알 수가 없습니다. .. @OneToMany(mappedBy = "team")// 1: 다 매핑에서 뭐랑 매핑 되는건가?, 반대편 사이트 private List members = new ArrayList(); ... https://github.com/oss0202/ex1-hello-jpa/blob/..
[자바 ORM 표준 JPA 프로그래밍] 연관관계 매핑 기초 - 단방향 연관관계 ( 1/3 ) - 목표 객체와 테이블 연관관계의 차이를 이해 객체의 참조와 테이블의 외래 키를 매핑 ※ 인프런 또는 유투브 강의를 보고 진행하는 것을 추천합니다. 이전 소스와 구분 가능하도록 주석 및 파일을 분리 했으나 보기 힘들 수 있습니다. - 객체를 테이블에 맞추어 데이터 중심으로 모델링할 경우, 협력 관계를 만들 수 없다. 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다. SELECT * FROM MEMBERRELATION M JOIN TEAM T ON M.TEAM_ID= T.TEAM_ID 객체는 참조를 사용해서 연관된 객체를 찾는다. 테이블과 객체 사이에는 이런 큰 간격이 있다. ... try ... // 객체를 테이블에 맞추어 데이터 중심으로 모델링 진행 Team team = new Team();..