작성
·
340
0
em.fluch(); 로 영속성 컨텍스트에 있는 쿼리를 db로 날린 후 em.clear(); 하여 영속성 컨텍스트를 비우면 em.find()로 조회했을 때 1차캐시가 아닌 db에서 값을 찾아오기 때문에 findMember에 해당하는 팀의 회원리스트를 받아 올 수 있다.
Team team = new Team();
team.setName("TeamA");
em.persist(team);
Member member1 = new Member();
member1.setName("member1");
member1.setTeam(team);
em.persist(member1);
Member member2 = new Member();
member2.setName("member2");
member2.setTeam(team);
em.persist(member2);
em.flush(); // 영속성 컨텍스트에 있는 쿼리를 db로 날림
em.clear(); // 영속성 컨텍스트를 비움
Member findMember = em.find(Member.class, member1.getId()); // db에서 값을 가져온다.
System.out.println("Team = " + findMember.getTeam().getName());
List<Member> members = findMember.getTeam().getMembers(); //양방향 연관관계
for (Member m : members) {
System.out.println("m = : " + m.getName());
}
답변 1
0
안녕하세요. wldbs1944님, 공식 서포터즈 OMG입니다.
em.fluch(); 로 영속성 컨텍스트에 있는 쿼리를 db로 날린 후 em.clear(); 하여 영속성 컨텍스트를 비우면 em.find()로 조회했을 때 1차캐시가 아닌 db에서 값을 찾아오기 때문에 findMember에 해당하는 팀의 회원리스트를 받아 올 수 있다.
=> 네, 맞습니다. 추가로 아래 링크에서 영한님의 댓글 답변을 보시면 더 명확하게 확인하실 수 있으실꺼에요.
em.flush, em.clear에 관한 질문입니다 - 인프런 | 질문 & 답변 (inflearn.com)
감사합니다.