작성
·
266
0
쓰기 지연 sql저장소에서 commit을 한번에 하는 데 select는 1차캐시에서 가지고 오는 건가요?
한 트랜잭션 안에 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에서 조회하지 않습니다.
감사합니다.