인프런 커뮤니티 질문&답변

kim1234123님의 프로필 이미지

작성한 질문수

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

필드와 컬럼 매핑

crud질문

23.01.27 23:13 작성

·

255

0

  1. 쓰기 지연 sql저장소에서 commit을 한번에 하는 데 select는 1차캐시에서 가지고 오는 건가요?

  2. 한 트랜잭션 안에 insert 와 select를 동시에 할 경우,



            Team team = new Team();
            team.setName("TeamA");
            em.persist(team);
//            System.out.println("team.getId() = " + team.getId());
//            System.out.println("team.getName() = " + team.getName());

//
//
            Member member = new Member();
            member.setUsername("member1");
            member.setTeam(team);
            System.out.println("==Before--");
            em.persist(member);
            System.out.println("==after--");

//            em.flush(); //현재 영속성 컨테스트에 있는것을 다 날려
//            em.clear();//영속성 컨테스트 초기화

//            //객체지향적이지 않은 방법
//            Member findMemner = em.find(Member.class, member.getId());
//            Long findteamId = findMemner.getTeamId();
//            Team findTeam = em.find(Team.class, findteamId);

//
            Member findMemner = em.find(Member.class, member.getId()); 
            Team findteam = findMemner.getTeam();
            System.out.println("findteam.getName() = " + findteam.getName());

findteam.getName()의 값이 나오는 이유가
1차 캐시에 저장된 @id에서 id값을 가지고 오기 때문에 commit되기 전(insert) 되기 전에
조회(select)문이 실행가능해지는 건가요?

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

2023. 01. 28. 19:30

안녕하세요. jacomyou님

em.persist 직후에 em.find로 조회하게 되면 이미 1차 캐시에 엔티티가 있기 때문에 1차 캐시에서 엔티티를 조회하게 됩니다. 이때는 DB에서 조회하지 않습니다.

감사합니다.