cascade
엔티티를 영속화할 때 연관된 엔티티도 함께 영속화하는 기능
예) 게시글과 게시글 좋아요의 관계
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "board", cascade = CascadeType.ALL, orphanRemoval = true)
private final List<BoardLike> boardLikeList = new ArrayList<>();
.. 생략
}
public class BoardLike {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "board_id", nullable = false)
private Board board;
private Long memberId;
.. 생략
}
public void boardAddLike(Long memberId) {
BoardLike boardLike = BoardLike.of(this, memberId);
this.boardLikeList.add(boardLike);
}
게시글에 좋아요 리스트가 있을 경우 boardAddLike(편의 메소드)를 통해서 리스트에 넣어주면
cascade = CascadeType.ALL로 인해서 boardLike를 save하지 않아도 영속화가 되어서 db에 저장이된다.
cascade 종류
- ALL: 모두 적용
- PERSIST: 영속
- REMOVE: 삭제
- MERGE: 병함
- REFRESH: refresh
- DETACH: detach
고아 객체
부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제
//위에 코드 있음
@OneToMany(mappedBy = "board", cascade = CascadeType.ALL, orphanRemoval = true)
private final List<BoardLike> boardLikeList = new ArrayList<>();
public void boardUnLike(BoardLike boardLike) {
this.boardLikeList.remove(boardLike);
}
list에서 지울경우 delete 쿼리가 나감
고아 객체와 cascade를 쓰지 말아야 하는 경우
한 테이블이 많은 곳에서 영향을 받는 경우 - 소유자가 하나일 경우만 사용!!
예) image 테이블이 있을경우 member와 연관이 있고 board와도 연관이 있을 경우
'spring boot > JPA - 기본' 카테고리의 다른 글
JPA - proxy(프록시) (0) | 2021.11.13 |
---|---|
JPA - 상속관계 매핑 (0) | 2021.11.08 |
JPA - 연관관계 매핑(2) (0) | 2021.11.08 |
JPA - 연관관계 매핑 (0) | 2021.10.26 |
jpa - 엔티티 매핑 (0) | 2021.10.21 |