flush 자동호출 - commit 할때, query 나갈때, flush 할때
find를 하면 1차캐쉬에 저장된다.
찾은 멤버를 setName하면 바로 update된다.
em.persist(member)를 할 필요가 없다.
Member member = em.find(Member.class, 150L); //1차캐쉬에 저장.
// 스냅샷도 저장됨(최초상태)
member.setName("ZZZZZ"); //찾아온 다음 변경하면 수정 끝.
// em.persist(member);//할필요 없다. 자바 컬렉션 다루듯이 써라.
System.out.println(" ================ ");
멤버를 하나 만들고 영속한다.(persist)한다.
em.flush()를 해서 db로 쿼리를 바로 날린다.
커밋은 안되며, 1차캐쉬도 남아있다.
Member member = new Member(200L,"member200");
em.persist(member);
em.flush(); //이 시점에 쿼리가 db에 바로 날라간다. 근데 커밋은안됨
// 1차캐쉬도 남아있다.
멤버를 찾는다아 업데이트한다. (찾으면 일단 1차캐쉬에 남아있음)
em.detach(member)를 하여 영속을 없앤다. (1개 가능)
clear는 모든 영속을 없애는것이다. (해당 entityManager가 관리하는것만)
Member member = em.find(Member.class,150L);
member.setName("AAAAA");
em.detach(member);
// em.clear();
Member member1 = em.find(Member.class,150L);
em.clear();
Member member2 = em.find(Member.class,150L);
em.close()를 하여 그냥 닫아버림.
후 작업을 할수 없다.
Member member1 = em.find(Member.class,150L);
em.close();
Member member2 = em.find(Member.class,150L);
Member member3 = em.find(Member.class,150L);
'Developer' 카테고리의 다른 글
[JPA]스키마 자동생성 (0) | 2020.09.16 |
---|---|
[JPA]Entity (0) | 2020.09.16 |
[JPA]persist와 1차캐쉬 (0) | 2020.09.16 |
[JPA]find, em.createQuery (0) | 2020.09.16 |
[JPA]첫걸음 (0) | 2020.09.16 |