SpringBoot+Jpa

casecade(영속성 전이)

lby132 2022. 11. 25. 22:54
@Entity
@Table(name = "orders")
@Getter @Setter
public class Order {

    @Id @GeneratedValue
    @Column(name = "order_id")
    private Long id;

    @ManyToOne(fetch = LAZY)
    @JoinColumn(name = "member_id")
    private Member member;

    @OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
    private List<OrderItem> orderItems = new ArrayList<>();

Order를 save해주면 Order가 persist될때 영속성전이 CascadeType.ALL을 해주면 

컬렉션에 들어와있는 OrderItem도 강제로 persist를 날려준다.

좋아보이지만 현재 Order가 orderItems를 관리하고 참조할때 사용한다. 만약 orderItems를 다른 엔티티에서도 참조하고 있다면

persist도 복잡하게 돌아가고 여기서 쓰고 있는데 다른곳에서 지워버리면 다 지워져 버리니까 좋은 방법이 아니라고 한다.

서로 참조하는게 아니고 여러군데에서 써야하는경우라면 각각의 repository를 만들어서 persist를 해주는게 낫다.

'SpringBoot+Jpa' 카테고리의 다른 글

양방향 연관관계 무한루프  (0) 2022.11.28
OSIV  (0) 2022.10.29
1대 N fetch join 위험성  (0) 2022.10.27
EntityManager의 @Autowired  (0) 2022.10.23
JPA사용시 @Transactional  (0) 2022.10.23