CascadeType.REMOVE
부모 엔티티가 삭제될 때 자식 엔티티도 함께 삭제한다.
@OneToMany(
mappedBy = "question",
cascade = CascadeType.REMOVE
)
private List<Answer> answers = new ArrayList<>();
questionRepository.delete(question);
실행 순서
- Answer 삭제
- Question 삭제
외래키 제약조건 때문에 부모보다 자식을 먼저 삭제한다.
CascadeType.PERSIST
부모 엔티티를 저장할 때 새로 생성된 자식 엔티티도 함께 저장한다.
@OneToMany(mappedBy = "question",
cascade = CascadeType.PERSIST)
private List<Answer> answers = new ArrayList<>();
Question question = questionRepository.findById(1).get();
question.addAnswer("새로운 답변");
// question이 관리 상태라면 트랜잭션 종료 시 Answer도 함께 INSERT
- 부모 저장
- 새 자식 자동 INSERT
가 이루어진다.
더티체킹과 차이
| 기능 | 자동 수행 |
| Dirty Checking | UPDATE |
| CascadeType.PERSIST | INSERT |
| CascadeType.REMOVE | DELETE |
flush()
questionRepository.flush();
영속성 컨텍스트 내용을 즉시 DB에 반영한다.
테스트에서는 트랜잭션 종료 전에 SQL 로그를 보기 위해 자주 사용한다.
flush를 안 쓰면?
테스트가 Rollback되므로 INSERT SQL이 출력되지 않을 수도 있다.
'BackEnd > Spring' 카테고리의 다른 글
| Spring Boot에서 HTML 페이지 출력하기 (Thymeleaf 사용법) (0) | 2026.08.06 |
|---|---|
| [Spring] Lazy Loading vs Eager Loading (0) | 2026.08.05 |
| [Spring] @OneToMany와 @ManyToOne (0) | 2026.08.05 |
| [Spring] Spring Boot에서 웹 요청은 어떻게 처리될까? (@Controller, @GetMapping) (0) | 2026.08.05 |
| [Spring] 외래키 (0) | 2026.08.04 |
댓글