728x90
반응형
jpa embedded, cascade 정리
Embedded
- 내장타입이며, 쉽게 자바로 얘기하면 객체 안의 객체라고 이해하면 됨.
- Embeddable 은 내장 객체에 선언. Embedded 는 내장 객체를 사용하는 곳에 선언.
- 재사용성이 좋고, 응집성이 좋겠지.
@Embeddable
public class Address {
private String zipCode;
private String addr;
}
@Entity
public class Member {
@Embedded
private Address address;
}
cascade
- cascade 는 연관관계의 데이터 변화를 같이 DB 에 반영하겠다는 것.
- CascadeType.ALL 옵션을 보통 쓰고, persist, remove 와 같은 옵션을 줄 수도 있다.
// 예를들면,
A 와 B 테이블이 있는데 1:n 임.
A 에서 B 객체를 cascade 해주면 persist(A) 할 때, B 도 변경된 것을 persist 처리가 됨.
A 객체의 인스턴스 에서 B 를 변경하면 B 도 변경 됨.
public class A {
@OneToMany(... cascade = CascadeType.ALL)
private List<B> list = xxx;
}
jpa cascade 를 어느 범위까지 설정해야하는가?
- A, B 가 있고 A —> B 단방향임.
- A 에는 B 에 대한 cascade.all 도 걸려있음.
- 즉, B 는 A 에서만 쓸 때, cascade 를 쓰면 좋다.
- 만약 B 를 C, D,E 에서 쓴다고 가정해보자. C,D,E 에서도 cascade 를 한다고 가정해보자. 그럼 엄청 복잡해지겠지.
- 그러니 결론은 B 가 A 단 한군데에서 쓰이면 cascade 를 써서 라이프사이클을 같이 관리하고. 아니면 BRepository 에 persist , ARepository persist 를 각각 부르자.
- 판단하기 어렵다면 그냥 쓰지말자.
'Jpa' 카테고리의 다른 글
jpa 준영속 상태 및 merge vs 변경감지 비교 (0) | 2021.01.06 |
---|---|
JPA ENUMERATED 사용법 정리 (0) | 2020.12.31 |
jpa 외래키 연관관계 맵핑 주인은 외래키가 존재하는 곳으로 설정 (0) | 2020.12.22 |
spring data jpa querydsl property not found 에러 (0) | 2020.12.04 |
jpa nativeQuery 로 오라클 시퀀스 호출 (0) | 2020.12.01 |
댓글