본문 바로가기
Jpa

jpa embedded, cascade 정리

by 무대포 개발자 2020. 12. 27.
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 를 각각 부르자.
  • 판단하기 어렵다면 그냥 쓰지말자.

댓글