상속관계 매핑객체는 상속관계가 존재하지만, 관계형 데이터베이스는 상속 관계가 없다.(대부분)그나마 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다.상속관계 매핑이라는 것은 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것이다.슈퍼타입 서브타입 논리 모델 -> 물리모델 구현 방법객체는 상속을 지원하므로 모델링과 구현이 똑같지만, DB는 상속을 지원하지 않으므로 논리 모델을 물리 모델로 구현할 방법이 필요하다.DB의 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법은 세가지 있다.중요한건, DB입장에서 세가지로 구현하지만 JPA에서는 어떤 방식을 선택하던 매핑이 가능하다.JPA가 이 세가지 방식과 매핑하려면@Inheritance(strategy=InheritanceT..
다대다[N:M]실무에선 사용하지 않는 것을 추천한다. 사용하면 안되는 이유를 학습하자.관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다.연결 테이블(조인 테이블)을 추가해서 일대다, 다대일 관계로 풀어내야한다. 객체는 컬렉션을 사용해서 객체 2개로 다대다 관계가 가능하다.ORM 입장에서는 테이블은 안되고, 객체는 안되는 것을 지원해줘야 한다.따라서, 아래의 그림에서와 같이 객체의 다대다 관계(멤버와 프로덕트가 서로 리스트를 가짐)와테이블에서 다대다 관계를 일대다 다대일 관계로 풀어낸 것 두개의 차이를 연결해준다. JPA @ManyToMany 어노테이션을 사용하고@JoinTable로 연결 테이블을 지정해줄 수 있다.다대다 단방향@Entity public class Member { ..
일대일 [1:1]일대일 관계는 그 반대도 일대일이다.일대일 관계는 특이하게 주 테이블이나 대상 테이블 중에 외래 키를 넣을 테이블을 선택 가능하다.주 테이블에 외래 키 저장대상 테이블에 외래 키 저장외래 키에 데이터베이스 유니크 제약조건 추가되어야 일대일 관계가 된다.일대일 - 주 테이블에 외래 키 단방향회원이 딱 하나의 락커를 가지고 있는 상황이다. 반대로 락커도 회원 한명만 할당 받을 수 있는 비즈니스 적인 룰이 있고, 이때, 둘의 관계는 일대일 관계이다.이 경우 멤버를 주 테이블로 보고 주 테이블 또는 대상 테이블에 외래 키를 저장할 수 있다. 단, 유니크 제약조건을 추가한 상태에서만.다대일[N:1] 단방향 관계 매핑과 JPA 어노테이션만 달라지고, 거의 유사하다.일대일 - 주 테이블에 외래 키 양..
일대다 [1:N]일대다 관계에서는 일이 연관관계의 주인이다.일 쪽에서 외래키를 관리하겠다는 의미가 된다.결론을 먼저 말하자면, 표준스펙에서 지원은 하지만 실무에서 이 모델은 권장하지 않는다.일대다 단방향 매핑팀과 멤버가 일대다 관계이다.Team이 Members를 가지는데, Member 입장에서는 Team을 참조하지 않아도 된다라는 설계가 나올 수 있다. 객체 입장에서 생각하면 충분히 나올 수 있는 설계이다.그러나 DB 테이블 입장에서 보면, 무조건 일대다의 다쪽에 외래키가 들어간다.Team에서 members가 바뀌면, DB의 Member 테이블에 업데이트 쿼리가 나가는 상황이다.일대다 단방향 매핑JPA @OneToMany와 @JoinColumn()을 이용해서 일대다 단방향 매핑 코드로 이해하기Member..
다대일 [N:1]JPA에서 가장 많이 사용하고, 꼭 알야야 되는 다중성이다.아래 테이블에서 보면, DB 설계상 일대다에서 다 쪽에 외래키가 있어야 한다. 그렇지 않으면 잘못된 설계다.객체로 와서, 다대일 관계에서 다인 멤버에서 단순하게 팀으로 단방향 참조를 하고 싶다고 할 때, 테이블에 외래키 있는 쪽인 멤버 객체에서 팀객체로 연관관계 매핑 하면 된다.테이블에서 FK가 팀을 찾기 위해 존재하고, 객체에서 Team 필드도 Team을 참조하기 위해 존재한다.다대일의 반대는 일대다다대일 단방향 매핑JPA @ManyToOne 어노테이션을 사용해서 다대일 관계를 매핑한다.@JoinColumn은 외래 키를 매핑할 때 사용한다. name은 매핑할 외래 키 이름이다.public class Member { ... @Ma..
연관관계 매핑시 고려사항 3가지다중성JPA 에서는 다중성을 위한 어노테이션을 제공한다.이 JPA 어노테이션들은 DB와 매핑하기 위해 존재 한다.그래서 데이터베이스 관점에서의 다중성을 기준으로 고민 하면 된다.다대일 - @ManyToOne일대다 - @OneToMany일대일 - @OneToOne다대다 - @ManyToMany다중성을 고민하다가 풀리지 않으면 대칭성을 고려하자. 다중성의 관계들은 대칭성을 다 가지고 있다. 예를 들면, 회원과 팀 - 팀과 회원 둘다를 고려하면 쉬워 진다.단방향, 양방향이전 학습 내용 정리단방향 연관관계 - https://ict-nroo.tistory.com/121양방향 연관관계 - https://ict-nroo.tistory.com/122테이블은외래 키 하나로 양쪽을 조인할 수..
- Total
- Today
- Yesterday
- github
- 라즈베리파이
- vuex
- Recursion
- 스프링부트
- RBT
- 시간복잡도
- Spring Boot
- AWS
- Spring
- 무선통신소프트웨어연구실
- 한밭대학교
- 순환
- 젠킨스
- 자바
- Raspberry Pi
- springboot
- 정렬
- 인프런
- vuejs
- JPA
- Algorithm
- ORM
- Wisoft
- Vue.js
- Java
- 한밭이글스
- 알고리즘
- 레드블랙트리
- IT융합인력양성사업단
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |