궁금증
인프런 - 스프링 부트 개념과 활용(백기선)에서
스프링 데이터 6부 : 스프링 데이터 JPA 연동을 듣다가 생긴 호기심이다.
@DataJpaTest에서 엔티티 객체를 생성하여 save()했는데
왜 반환된 객체를 새로운 참조 변수에 담아 그를 테스트하는지 궁금했다.
해결
save()
- save()는 엔티티의 상태가 어떻든 저장한다.
- 엔티티를 새로 저장할 수도 있고, 기존 엔티티를 새로운 엔티티와 병합할 수도 있다.
- 병합 시 동일한 id에 연결된 엔티티에 상태를 복사하고 그 엔티티를 반환한다.
save()로 새로 저장하는 경우에는 Account와 newAccount가 동일한 객체다.
하지만, merge하는 경우엔 다른 인스턴스일 것이다.
반환된 인스턴스를 사용하지 않으면, 분리된 엔티티(detached entity)를 수정하게 되어 문제가 발생한다.
출처
'왜?' 카테고리의 다른 글
[왜] 스프링부트의 repository는 클래스가 아니라 인터페이스일까? (0) | 2020.05.11 |
---|---|
[왜] gradle은 다운로드한 의존성 파일(jar)을 해당 프로젝트에 보관하지 않을까? (0) | 2020.04.25 |
[왜] synchronized block은 오버헤드를 증가시킬까? (0) | 2020.04.19 |
[왜] 로그 찍을 때 System.out.println을 사용하면 안 좋을까? (0) | 2020.04.18 |
댓글