멤버를 만든다.
Member member = new Member();
member.setId(101L);
member.setName("HelloJPA");
persist를 하면 DB에 바로 저장은 안된다.
영속성 컨텍스트에 저장된다.(commit)해야 db에 전달됨.
아래코드는 AFTER 이후 commit할때 쿼리가 전달되는것이다.
//영속
System.out.println("===BEFORE===");
em.persist(member); //이때 DB에 저장되는것이 아님
System.out.println("===AFTER===");
find로 멤버를 찾는다. 101L은 PK이다.
Member findMember = em.find(Member.class,101L);
System.out.println("findMember.getId() = " + findMember.getId());
System.out.println("findMember.getName() = " +
101L이란 PK를 가진 멤버를 2개 만든다.
1은 1차캐쉬에 저장된다.
2를 생성할때 1차캐쉬를 사용한다.
그러므로 둘은 동일하다. 쌍둥이가 아니라 그냥 자기자신임.
Member findMember1 = em.find(Member.class, 101L);
Member findMember2 = em.find(Member.class, 101L); //1차캐시부터 뒤짐.
//일반적으로 1차캐쉬가 크게 도움을 주지 않음
System.out.println("compare 1,2 = "+(findMember1==findMember2));
//1차 캐시때문에 true가 나온다. 엔티티 동일성 보장
'Developer' 카테고리의 다른 글
[JPA]Entity (0) | 2020.09.16 |
---|---|
[JPA]영속성과 준영속성 관리, flush (0) | 2020.09.16 |
[JPA]find, em.createQuery (0) | 2020.09.16 |
[JPA]첫걸음 (0) | 2020.09.16 |
Controller와 RestController 차이 (0) | 2020.09.09 |