반응형
해당 강의는 코드 위주로 진행됩니다. 실질적인 객체 처리를 담당하는 코드는 링크에서 확인하시길 바랍니다.
- find()로 찾아온 객체를 활용에서 persist()를 하면 에러가 발생하지 않는다.
- 새로 만든 객체를 활용해서 persist()를 하면 DB에 새롭게 만든 객체의 정보가 없으니까 에러가 발생한다.
- 그런데 오른쪽처럼 코드를 작성하고 싶으면 어떻게 해야할까?
* 영속성 전파
- 연관된 엔티티에 영속 상태를 전파 : 나와 연관된 엔티티에 나의 영속상태가 바뀌는 것을 전파한다.
- 예, 저장할 때, 나와 연관된 엔티티도 함께 저장되게 하는 것.
- Team 클래스에서 확인할 수 있다
- 연관하는 애너테이션(@OneToOne, @OneToMany, @ManyToMany)에 cascade라는 속성의 값을 CascadeType.PERSIST로 설정한다.
- 해당 값을 설정하면 Team을 저장할 때 아직 저장되지 않은 Player 객체도 DB에 저장한다.
* 영속성 전파 종류
- 엔티티 매니저가 제공하는 메서드 이름이다.
- ALL : 아래 다섯가지를 모두 설정한다.
- PERSIST : 저장할 때 연관된 엔티티도 같이 저장한다.
- MERGE
- REMOVE : 삭제할 때 연관된 엔티티도 같이 삭제한다.
- REFRESH
- DETACH
* 영속성 전파 주의 사항
- 정말 특별한 이유가 없다면 사용하지 말자.
- 연관도 어지간하면 안써야하는데, 하물며 영속성 전파까지?
* 연관 고려 사항
- 연관 대신에 id 값으로 참조하는 것을 먼저 고려하자
- 주문에서 회원을 참조하는데, 주문이 회원을 직접 참조하지 말고 ID값으로 참조하는 것을 고려해보자.
- 객체 탐색이 쉽다고 연관을 쓰는 것은 안된다.
- 조회는 전용 쿼리나 구현의 사용을 고려하자 (CQRS)
- 정말 엔티티 간의 연관인지, 엔티티가 아닌 밸류인지 확인하자.
- 특히 1-1, 1-N관계에서 이런 경우가 더욱 많다.
- 정말 어쩔 수 없이 써야 한다면 1-N보다는 N-1
- 양방향은 절대 쓰지 말자.
반응형
'Programming > JPA & Spring Data JPA 기초' 카테고리의 다른 글
19. Criteria 소개 (0) | 2023.04.04 |
---|---|
18. JPQL 소개 (0) | 2023.03.30 |
16. 엔티티 간 1-N 단방향 연관 매핑 (0) | 2023.03.28 |
15. 엔티티 간 N-1 단방향 연관 매핑 (0) | 2023.03.28 |
14. 엔티티 간 1-1 단방향 연관 매핑 (0) | 2023.03.27 |
댓글