Life Developer
인생 개발자
[JPA]영속성과 준영속성 관리, flush

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
  Comments,     Trackbacks