inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

영속성 전이(CASCADE)와 고아 객체

왜 flush와 clear를 안하면 자식이 삭제가 안될까요??

468

화이

작성한 질문수 11

1

orphanRemoval=true를 적용하고 em.flush / clear를 호출 안하면 왜 자식이 삭제가 안되는 걸까요??

기본키 전략이 IDENTITY 이서 em.persist 하면 자동으로 INSERT SQL이 나가는데 계속 em.flush / clear 를 하고 자식을 삭제해야만 DELETE SQL이 나가더라고요.

java JPA

답변 2

2

김영한

안녕하세요. 화이님

orphanRemoval 같은 기능이 동작하려면 JPA의 기능을 완전히 지원 받아야 합니다.

그런데 em.clear()를 호출하지 않으면 아직까지는 내가 직접 만든 객체가 영속성 컨텍스트에 존재하게 됩니다.

이 경우 orphanRemoval이 지원되지 않습니다. 이 부분은 하이버네이트 구현체의 한계라고 생각하시면 됩니다.

em.clear()를 호출하고 다시 조회하게 되면 orphanRemoval이 온전하게 지원되는 객체를 JPA로 부터 받게 됩니다. 이것은 내가 만든 객체가 아니라 JPA가 완전히 새로 만든 객체입니다. 그래서 해당 기능이 잘 수행됩니다.

그런데 일반적으로 데이터를 완전히 저장하고, 그 다음에 다른 곳에서 데이터를 삭제하기 때문에 이런 문제가 실무에서는 발생하지 않습니다.

감사합니다.

0

김영한

안녕하세요. 화이님

전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

추가로 다음 내용도 코멘트 부탁드립니다.

1. 실행 방법을 알려주세요.

2. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.

감사합니다.

0

화이

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문이 나갑니다.

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

0

58

2

inheritance startegy 선택시 고려사항

0

42

1

Entity 동등성 비교

0

47

1

실무 조언 관련 질문입니다.

0

68

1

H2데이터베이스 파일 생성

0

78

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

70

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

63

1

JPQL 메소드와 락

0

63

1

Delivery @OneToOne

0

71

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

104

2

UnsupportedOperationException 발생

0

97

3

H2 Database 연결이 안됩니다.

0

103

2

연관관계 매핑 질문드립니다.

0

95

2

h2데이터베이스 실행오류

0

116

2

persistence.xml

0

121

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

90

1

영속성 컨텍스트

0

77

1

JPA 프록시

0

107

1

Native Query와 MyBatis

0

83

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

97

1

임베디드 타입 예시 코드 관련 질문

0

126

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

103

3

인텔리제이 패키지 커서 단축키 질문

0

113

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

156

1