작성
·
115
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
@BatchSize 사용시 IN 쿼리 발생 시점에 과정이 궁금해서 질문 남깁니다.
Team teamA = new Team();
teamA.setName("teamA");
Team teamB = new Team();
teamB.setName("teamB");
em.persist(teamA);
em.persist(teamB);
User user1 = new User();
user1.setUsername("user1");
user1.setTeam(teamA);
em.persist(user1);
User user2 = new User();
user2.setUsername("user2");
user2.setTeam(teamA);
em.persist(user2);
User user3 = new User();
user3.setUsername("user3");
user3.setTeam(teamB);
em.persist(user3);
em.flush();
em.clear();
List<Team> result = em.createQuery("select t from Team t", Team.class)
.getResultList();
System.out.println("==============================");
for (Team team : result) {
System.out.println("team.getUsers().size() = " + team.getUsers().size());
}
result에서 조회된 team들의 team_id가 IN 쿼리의 파라미터로 바인딩되고 그에 해당하는 user 인스턴스들이 영속성 컨텍스트에 저장되는 것 까지는 알겠습니다.
그 이후에 이 user 인스턴스들이 어떻게 team의 users 컬렉션에 매핑되는 것인지가 궁금합니다.
답변 1
0
안녕하세요. 도토리묵님
이 부분은 하이버네이트 내부에서 수행되는데요.
result에서 조회된 team들의 team_id가 IN 쿼리의 파라미터로 바인딩되고 그에 해당하는 user 인스턴스들이 영속성 컨텍스트에 저장되고 나서, user 인스턴스에는 team_id 값이 들어있습니다. 이 값이 결국 team의 @Id 값이기 때문에 이 값을 확인하면 본인이 어떤 team에 소속되어야 하는지 알 수 있습니다.
감사합니다.