본문 바로가기

Java/JPA

JPA 매커니즘

  • EntityManagerFactory는 하나만 생성해서 애플리케이션 전체에서 공유한다.
  • EntityManager는 쓰레드간 공유하지 x(사용하고 버린다)
  • JPA의 모든 데이터 변경은 트랜잭션 안에서 실행한다.

준영속상태(detach) : 영속성 컨텍스트에서 빠진 상태

em.clear() : 1차캐시 다 지움. 테스트할 때 많이 쓰인다.

 

영속성 컨텍스트(엔티티를 영구 저장하는 환경)의 이점

  • 1차 캐시 
  • 동일성(identity) 보장
  • 트랜잭션을 지원하는 쓰기 지연
  • 변경 감지(Dirty Checking)
  • 지연 로딩(Lazy Loading)

같은 트랜잭션 내에서는 동일성 보장한다.

@Test
public void testMember() throws Exception {
    // given
    Member member = new Member("memberA");
    Member savedMember = memberJpaRepository.save(member);

    Member findMember = memberJpaRepository.find(savedMember.getId());

    assertThat(findMember.getId()).isEqualTo(member.getId());
    assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
    assertThat(findMember).isEqualTo(member);

 

위의 코드에서 member와 findMember == 비교시 true 출력 ( 같은 트랜잭션 내에 있어서.)

'Java > JPA' 카테고리의 다른 글

@MappedSuperclass  (0) 2023.11.17
상속관계 테이블 설계 전략  (0) 2023.11.17
연관관계 매핑(양방향)  (0) 2023.11.15
연관관계 매핑(단방향)  (0) 2023.11.15
JPA 도메인분석설계 @Entity  (0) 2023.11.09