inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 데이터 JPA

순수 JPA 기반 리포지토리 만들기

영속성 컨텍스트 관련 질문입니다.

323

HappyJay

작성한 질문수 16

1

매번 수준 높은 강의에 감사 드리고 열심히 공부하고 있습니다!!

그런 의미에서 질문이 있는데요, 

1. 만약 MemberJpaRepositoryTest 에서

아래처럼 EntityManager 를 또 주입 받았을 경우 

기존에 MemberJpaRepository 에서의 EntityManager 와

Test에서의 EntityManager 가 같은 영속성 컨텍스트를 바라보고 있는 건가요?

2. flush 이후에 clear 를 통해서 영속성 컨텍스트를 비우고

엔티티의 값을 변경하면, 1차 캐시에 객체가 없어서 변경감지가 일어나지 않기 때문에 update 가 발생하지 않는게 맞나요?

3. 그러면 혹시 2번에서 발생한 변경사항을 db에 반영할 수 있는 방법은 없을까요? 아니면 1차 캐시에 존재하지 않는 객체의 속성을 변경하려고 할 경우 에러를 낸다던지 하는 건 없을까요?

class MemberJpaRepositoryTest {

@PersistenceContext
EntityManager newEm;

@Autowired MemberJpaRepository memberJpaRepository;

@Test
public void basicCRUD() {
Member member1 = new Member("member1");
Member member2 = new Member("member2");
memberJpaRepository.save(member1);
memberJpaRepository.save(member2);

newEm.flush();
newEm.clear();

member1.setMemberName("newMember1");
}
}

java spring spring-boot JPA

답변 2

1

김영한

안녕하세요. HappyJays님

1. 만약 MemberJpaRepositoryTest 에서

아래처럼 EntityManager 를 또 주입 받았을 경우 

기존에 MemberJpaRepository 에서의 EntityManager 와

Test에서의 EntityManager 가 같은 영속성 컨텍스트를 바라보고 있는 건가요?

같은 트랜잭션 안에서는 같은 영속성 컨텍스트에 접근합니다. 트랜잭션이 다르면 다른 영속성 컨텍스트에 접근하게 됩니다.

해당 테스트 케이스에 트랜잭션이 설정되어 있다고 가정한다면 같은 영속성 컨텍스트에 접근하게 됩니다.

2. flush 이후에 clear 를 통해서 영속성 컨텍스트를 비우고

엔티티의 값을 변경하면, 1차 캐시에 객체가 없어서 변경감지가 일어나지 않기 때문에 update 가 발생하지 않는게 맞나요?

네 맞습니다.

3. 그러면 혹시 2번에서 발생한 변경사항을 db에 반영할 수 있는 방법은 없을까요? 아니면 1차 캐시에 존재하지 않는 객체의 속성을 변경하려고 할 경우 에러를 낸다던지 하는 건 없을까요?

준영속 상태의 객체를 다시 영속 상태로 만들려면 em.merge()를 호출하시면 됩니다. 이렇게 하면 변경한 데이터도 함께 반영됩니다.

감사합니다.

0

HappyJay

답변 주신 내용 중에 트랜잭션 관련해서 질문이 하나 더 있습니다.

아래처럼 각각 @Transactional 이 붙어있는 함수에 대해서

호출관계가 있을 경우

2개 함수는 같은 트랜잭션으로 묶이는건가요? 아니면 서로 다른 트랜잭션으로 처리되는 건가요?

@Transactional
public void A() {
B();
}

@Transactional
public void B() {
}

0

김영한

네 같은 트랜잭션을 사용합니다.

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