인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Inflearn Community Q&A

123444444's profile image
123444444

asked

Java ORM Standard JPA Programming - Basics

Field and Column Mapping

crud질문

Written on

·

290

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)문이 실행가능해지는 건가요?

jpajavaJPA

Answer 1

0

yh님의 프로필 이미지
yh
Instructor

안녕하세요. jacomyou님

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

감사합니다.

123444444's profile image
123444444

asked

Ask a question