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

kim1234123님의 프로필 이미지
kim1234123

작성한 질문수

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

필드와 컬럼 매핑

crud질문

작성

·

270

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

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

안녕하세요. jacomyou님

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

감사합니다.

kim1234123님의 프로필 이미지
kim1234123

작성한 질문수

질문하기