작성
·
395
답변 2
2
안녕하세요. 화이님
orphanRemoval 같은 기능이 동작하려면 JPA의 기능을 완전히 지원 받아야 합니다.
그런데 em.clear()를 호출하지 않으면 아직까지는 내가 직접 만든 객체가 영속성 컨텍스트에 존재하게 됩니다.
이 경우 orphanRemoval이 지원되지 않습니다. 이 부분은 하이버네이트 구현체의 한계라고 생각하시면 됩니다.
em.clear()를 호출하고 다시 조회하게 되면 orphanRemoval이 온전하게 지원되는 객체를 JPA로 부터 받게 됩니다. 이것은 내가 만든 객체가 아니라 JPA가 완전히 새로 만든 객체입니다. 그래서 해당 기능이 잘 수행됩니다.
그런데 일반적으로 데이터를 완전히 저장하고, 그 다음에 다른 곳에서 데이터를 삭제하기 때문에 이런 문제가 실무에서는 발생하지 않습니다.
감사합니다.
0
안녕하세요. 화이님
전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.
주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요
추가로 다음 내용도 코멘트 부탁드립니다.
1. 실행 방법을 알려주세요.
2. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.
감사합니다.
https://drive.google.com/file/d/1mBt7dGRJylJ5VaW6F8I210v7Rk73P-vp/view?usp=sharing
1. 실행 방법을 알려주세요.
App.java main 메서드 실행하면 됩니다.
2. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.
현재 em.flush/clear 메서드가 주석처리하고 실행하면
list에서 자식 객체를 삭제해도 delete문이 나가지 않지만 em.flush/clear 메서드 주석을 해제하면 정상적으로 delete문이 나갑니다.