엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전, 엔티티 매니저는 동시성 문제가 발생하므로 스레드 간에 공유하면 안된다.
영속성 컨텍스트란? 엔티티를 영구 저장하는 환경, 엔티티 매니저를 생성할 때 하나 만들어진다.
엔티티의 생명주기
- 비영속 : 영속성 컨텍스트와 전혀 관계가 없는 상태
- 영속 : 영속성 컨테스트에 저장된 상태
- 준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태 (detach, close, clear)
- 삭제 : 삭제된 상태 (remove)
영속성 컨텍스트의 장점
- 1차 캐시에서 조회
em.persist(member); //1차 캐시에 저장됨 Member findMember = em.find(Member.class, “member1”); //1차캐시에서 조회
- 동일성 보장
Member a = em.find(Member.class, “member1”); Member b = em.find9Member.class, “member1”); System.out.println(a == b); //true
- 트랜잭션을 지원하는 쓰기 지연
begin(); //트랜잭션 시작 save(A); save(B); save(C); commit(); //트랜잭션 커밋
- 변경 감지
memberA.setUsername(“hi”);
모든 필드를 업데이트한다. @org.hibernate.annotations.DynamicUpdate는 수정된 데이터만 동적으로 업데이트. 약 30개 이상이 되면 동적 수정 쿼리를 사용하는데 30개 이상의 컬럼이 된다는 것은 테이블 설계에 대한 부분을 고려해보아야 한다.
출처 : 자바 ORM 표준 JPA 프로그래밍 김영한 지음