inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

detach, remove의 차이

3147

rlarkddnr1686

작성한 질문수 2

0

안녕하세요 수업을 듣다 궁금한 게 생겨 질문합니다!!

detach와 remove 메서드를 비교하면서 헷갈리는 부분이 생겨났습니다!!

원래는 persist가 호출된 시점에 SQL 쓰기지연 저장소에 insert 쿼리가 저장되는 것으로 이해했지만 detach()가 호출됐을 때 insert문이 나가지 않는 것을 보고 저는 persist가 호출됐을 때 SQL 쓰기지연 저장소에 insert 쿼리가 저장되는 것이 아니라 flush를 호출할 때 1차 캐시에서의 변경사항(스냅샷 비교 또는 새로운 엔티티 등록)으로 인해 insert 쿼리가 나가는 것이 아닌가로 생각했습니다.

하지만 remove를 호출했을 때 insert문이 나가고 delete문이 따로 나가는 것을 보고 헷갈리기 시작했습니다. 만약 변경 감지 기능이라는 것이 기존의 1차 캐시에 저장된 엔티티와 스냅샷을 비교하여 다른 부분을 update 쿼리를 자동으로 실행해주는 기능이라 생각한다면 위의 remove 실행 시 DB로 보내진 쿼리가 이해가 됩니다. 새로 등록한 것과 삭제하는 것은 스냅샷으로 비교할 수 없기 때문에 persist나 remove 호출 시점에 따로 SQL 쓰기지연 저장소에 쿼리를 저장할 수 밖에 없다라고 생각하기 때문입니다. 하지만 이렇게 생각했을 경우 위의 detach 실행 시 쿼리가 이해가 안됩니다.. 제가 어디서 헷갈리고 있는 걸까요??

jpa java JPA

답변 1

1

김영한

안녕하세요. rlarkddnr1686님

detach가 일어나면 해당 엔티티를 영속성 컨텍스트에서 완전히 제거해버립니다. 따라서 변경감지가 동작할 이유가 없겠지요?

persist 직후에 remove가 발생하게 되면 엔티티를 삭제 상태로 체크해둡니다. 그래서 플러시 시점에 insert, delete가 발생합니다.

감사합니다.

0

rlarkddnr1686

항상 친절한 답변 감사드립니다.

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

0

28

2

inheritance startegy 선택시 고려사항

0

22

1

Entity 동등성 비교

0

21

1

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

0

47

1

H2데이터베이스 파일 생성

0

56

2

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

0

53

2

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

0

53

1

JPQL 메소드와 락

0

55

1

Delivery @OneToOne

0

60

1

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

0

94

2

UnsupportedOperationException 발생

0

86

3

H2 Database 연결이 안됩니다.

0

95

2

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

0

85

2

h2데이터베이스 실행오류

0

108

2

persistence.xml

0

108

2

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

0

80

1

영속성 컨텍스트

0

66

1

JPA 프록시

0

96

1

Native Query와 MyBatis

0

70

1

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

0

87

1

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

0

115

3

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

0

95

3

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

0

108

2

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

0

145

1