[ Entity 연관 관계 ]
1 대 1
@OneToOne
단방향 관계
- 외래 키 주인 : 외래 키 등록, 수정, 삭제 가능
나머지 : 조회만 가능
양방향 관계
- 외래 키 주인 지정 : mappedBy ("키 주인 entity의 필드 명")
- @JoinColumn( )으로 외래 키 속성을 설정할 수 있음
N 대 1
@ManyToOne
1 대 N
@OneToMany
단방향 관계
외래 키의 주인은 '1'이다 ⇒ List 필요
실제로는 'N'이 외래 키를 갖지만, 관리를 할 수는 없다
- update가 추가적으로 발생한다는 문제점을 가진다
양방향 관계는 존재하지 않는다
N 대 M
@ManyToMany
중간테이블을 사용한다
중간테이블은 JPA (annotation)에 의해 만들어진다
- 컨트롤 하기가 어렵기 때문에, 중간 테이블에 변경이 발생할 경우 문제가 생길 수 있다
[ 지연로딩 ]
지연로딩
LAZY
: 연관 관계가 설정된 entity의 정보를 필요할 때 가져옴
@~ToMany 일 경우 지연로딩을 default로 가진다
즉시로딩
EAGER
: 연관 관계가 설정된 entity의 정보를 바로 가져옴
@~ToOne 일 경우 즉시로딩을 default로 가진다
영속성 컨택스트와의 관계
지연로딩된 entity를 조회하기 위해서는 영속성 컨택스트가 존재해야 한다
⇒ transaction이 적용되어 있어야 함!!
[ CASCADE ]
영속성 전이
cascade = CascadeType.PERSIST
: 영속 상태의 entity에서 수행되는 작업들이 연관된 entity까지 전파되는 상황
[ Orphan Entity ]
고아 Entity
orphan removal / remove 사용 시 삭제하려고 하는 연관된 entity를 다른 곳에서도 참고하고 있지는 않는지 확인이 필요하다
⇒ @ManyToOne 사용 불가능
'스파르타 내배캠' 카테고리의 다른 글
[TIL] #24. JWT (0) | 2024.05.24 |
---|---|
[TIL] #23. 연관관계 (0) | 2024.05.24 |
[TIL] #21. spring 3주차 강의 (0) | 2024.05.21 |
[TIL] #20. Transaction (0) | 2024.05.20 |
[TIL] #19. Spring + JPA (0) | 2024.05.17 |