인프런 커뮤니티 질문&답변
QueryHint readonly 와 영속성 컨텍스트 질문
작성
·
320
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
MemberRepository
	/**
	 * JPA Hint
	 */
	@QueryHints(value = @QueryHint(name = "org.hibernate.readOnly", value = "true"))
	Member findReadOnlyByUsername(String username);
test
	@Test
	@Rollback(false)
	void findReadOnlyByUsername() {
		// given
		memberRepository.save(new Member("member1", 10));
		em.flush();
		em.clear();
		// when
		Member member = memberRepository.findReadOnlyByUsername("member1"); // 쿼리힌트로 readonly 설정
		member.setUsername("member2");
		em.flush(); // update 쿼리가 나가지 않음
		em.clear();
		System.out.println("member.getUsername() = " + member.getUsername());
	}영한님이 설명해주신대로 update 쿼리가 나가지 않아서 실제 DB 상에는 member2 가 아닌 member1 이 들어가있음을 확인했습니다
그리고 em.clear() 로 영속성컨텍스트를 초기화 한 후, member 의 username 을 찍어봤는데 member2 가 찍히더라구요
저는 영속성 컨텍스트를 초기화했으므로, member 조회 시 DB 에서 가져오므로 member1 이 찍힐 것이라고 생각했는데 제 생각이 틀린 건가요?
아래는 출력로그 입니다
2023-08-14 17:17:17.797  INFO 15063 --- [           main] p6spy                                    : 23.08.14 17:17:17 | OperationTime 4 ms | statement | connection 3 
    select
        member0_.member_id as member_i1_0_,
        member0_.age as age2_0_,
        member0_.team_id as team_id4_0_,
        member0_.username as username3_0_ 
    from
        member member0_ 
    where
        member0_.username='member1'
member.getUsername() = member2
답변 1
0






이해가 되었습니다 감사합니다!