영속성 컨텍스트 관련 질문입니다.
323
작성한 질문수 16
매번 수준 높은 강의에 감사 드리고 열심히 공부하고 있습니다!!
그런 의미에서 질문이 있는데요,
1. 만약 MemberJpaRepositoryTest 에서
아래처럼 EntityManager 를 또 주입 받았을 경우
기존에 MemberJpaRepository 에서의 EntityManager 와
Test에서의 EntityManager 가 같은 영속성 컨텍스트를 바라보고 있는 건가요?
2. flush 이후에 clear 를 통해서 영속성 컨텍스트를 비우고
엔티티의 값을 변경하면, 1차 캐시에 객체가 없어서 변경감지가 일어나지 않기 때문에 update 가 발생하지 않는게 맞나요?
3. 그러면 혹시 2번에서 발생한 변경사항을 db에 반영할 수 있는 방법은 없을까요? 아니면 1차 캐시에 존재하지 않는 객체의 속성을 변경하려고 할 경우 에러를 낸다던지 하는 건 없을까요?
답변 2
1
안녕하세요. HappyJays님
1. 만약 MemberJpaRepositoryTest 에서
아래처럼 EntityManager 를 또 주입 받았을 경우
기존에 MemberJpaRepository 에서의 EntityManager 와
Test에서의 EntityManager 가 같은 영속성 컨텍스트를 바라보고 있는 건가요?
같은 트랜잭션 안에서는 같은 영속성 컨텍스트에 접근합니다. 트랜잭션이 다르면 다른 영속성 컨텍스트에 접근하게 됩니다.
해당 테스트 케이스에 트랜잭션이 설정되어 있다고 가정한다면 같은 영속성 컨텍스트에 접근하게 됩니다.
2. flush 이후에 clear 를 통해서 영속성 컨텍스트를 비우고
엔티티의 값을 변경하면, 1차 캐시에 객체가 없어서 변경감지가 일어나지 않기 때문에 update 가 발생하지 않는게 맞나요?
네 맞습니다.
3. 그러면 혹시 2번에서 발생한 변경사항을 db에 반영할 수 있는 방법은 없을까요? 아니면 1차 캐시에 존재하지 않는 객체의 속성을 변경하려고 할 경우 에러를 낸다던지 하는 건 없을까요?
준영속 상태의 객체를 다시 영속 상태로 만들려면 em.merge()를 호출하시면 됩니다. 이렇게 하면 변경한 데이터도 함께 반영됩니다.
감사합니다.
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
64
1
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
99
3
MemberRepository 구현체
0
54
1
pdf 표현 질문드립니다.
0
59
1
로그가 남지 않는 문제.
0
78
1
테스트 라이브러리가 강의는 junit4가 맞나요??
0
67
2
pdf 파일과 차이점이 있는 것같은데 문제 없나요?
0
68
2
@PrePersist, @PreUpdate 호출 시점 질문드립니다.
0
87
2
Sort 인터페이스는 잘 사용 안하나요?
0
50
1
스캔대상 질문드립니다.
0
45
1
하이버네이트6에서의 최적화에 이은 질문
0
81
1
save() vs saveAndFlush DB 통신 횟수
0
50
1
순수 JPA 리포지토리 코드 수정부분
0
85
2
bulk연산 후 flush하는 이유를 모르겠어요
0
147
3
bulk insert 질문입니다.
0
174
2
교만했던 것 같아요.
0
142
1
RESTful 강의는 안하시는 건지 궁금합니다.
0
143
2
동적 테이블에 대한 질문
0
84
1
영속성 전이와 연관관계
0
128
2
강의 10:25 질문
0
71
1
단건 update 질문
0
94
2
엔티티 와 도메인의 경계
0
124
1
UsernameOnlyDto 타입 type mismatch 오류
0
114
1
Projection 개념과 데이터 전달과정에 대해 질문 있습니다.
0
131
1





