본문 바로가기

전체 글120

JPA - @MappedSuperclass @MappedSuperclass 코드예제 @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public abstract class BaseTimeEntity{ @CreatedDate // Entity가 생성되어 저장될 때 시간이 자동 저장됩니다. private LocalDateTime createDate; @LastModifiedDate // 조회한 Entity 값을 변경할 때 시간이 자동 저장됩니다. private LocalDateTime modifiedDate; } @Entity public class Member extends BaseEntity{ ... } // JPA Auditing 활성화 @EnableJpaAudi.. 2022. 4. 10.
JPA - 상속관계 매핑 상속관계 매핑 • 관계형 데이터베이스는 상속 관계가 존재하지 않는다. • 데이터베이스의 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. • 상속관계 매핑이란 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것이다. ※ DB 설계에는 논리모델(왼쪽)이 있고 물리모델(오른쪽)이 있다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 3가지 방법 1. 각각 테이블로 변환 -> 조인 전략 (권장) 2. 통합 테이블로 변환 -> 단일 테이블 전략 (기본설정) 3. 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 (추천하지않음) ※참고로 상위 클래스는 반드시 abstract class로 만들어야한다.※ 밑에 코드예제에서는 class를 abstract로 선언하지 않았다.. 2022. 4. 10.
JPA - 다양한 연관관계 매핑(4) : 다대다 [N : M] 다대다 • 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다. • 연결 테이블을 추가해서 일대다, 다대일 관계로 풀어내야한다. • 보면 두 개의 PK가 묶여있는걸 알 수 있다. • 객체는 컬렉션을 사용해서 객체 2개로 다대다 관계 가능 다대다 단방향 public class Member{ @ManyToMany @JoinTable(name = "MEMBER_PRODUCT") private List products = new ArrayList(); } 다대다 양방향 public class Member{ @ManyToMany @JoinTable(name = "MEMBER_PRODUCT") private List products = new ArrayList(); } public class.. 2022. 4. 10.
JPA - 다양한 연관관계 매핑(3) : 일대일 [1 : 1] 일대일 • 회원이 딱 하나의 락커를 가지고 있는 상황이다. 반대로 락커도 회원 한명만 할당 받을 수 있는 비즈니스 적인 룰이 있고이때, 둘의 관계는 일대일 관계이다, (일대일 관계는 그 반대도 일대일) • 일대일 관계는 다대일 단방향과 매우 유사하다 (유니크가 들어가냐, 들어가지 않냐의 차이) • 주 테이블이나 대상 테이블 중에 외래 키 선택 가능 • 주 테이블에 외래 키 (단방향, 양방향) • 대상 테이블에 외래 키 (단방향, 양방향) = 총 네 가지의 경우의 수 • 외래 키에 데이터베이스 유니크(UNI) 제약조건 추가 • 일대일에서는 어느 테이블FK를 가지면 그 테이블과 매핑되는 객체가 연관관계의 주인이 된다. 1-1. 주 테이블 왜래 키 단방향 public class Member{ @OneToOne.. 2022. 4. 10.
JPA - 다양한 연관관계 매핑(2) : 일대다 [1 : N] 1. 일대다 단방향 public class Team{ @OneToMany // (mappedBy = "team") 가 빠짐 @JoinColumn(name = "TEAM_ID") //@JoinColumn이 추가됨 private List members = new ArrayList(); // 단순 조회가 아닌 변경이 가능해짐 } public class Member{ ... // 아무것도 해줄 필요 없음 } Member member = new Member("member1"); em.persister(member); Team team = new Team("teamA"); team.getMembers().add(member); // 이런 코드가 가능해진다. em.persist(team); TEAM과 MEMBER의 .. 2022. 4. 9.
JPA - 다양한 연관관계 매핑(1) : 다대일 [N : 1] feat. 연관관계 매핑시 고려사항 연관관계 매핑시 고려사항 3가지 1. 다중성 다대일 [N : 1] : @ManyToOne // 많이 사용 일대다 [1 : N] : @OneToMany // 가끔 사용 일대일 [1 : 1] : @OneToOne // 가끔 사용 다대다 [N : M] : @ManyToMany // 실무에서 사용 금지 JPA 어노테이션들은 거의 DB와 매핑하기 위해 존재한다. 따라서 다중성을 고려할때는 데이터베이스의 관점에서 다중성을 고려하면 된다. 2. 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인가능 사실 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 3. 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A.. 2022. 4. 9.