[자바 ORM 표준 JPA 프로그래밍] 13.1 트랜잭션 범위의 영속성 컨텍스트

[자바 ORM 표준 JPA 프로그래밍] 13.1 트랜잭션 범위의 영속성 컨텍스트

@Contorller class HelloController { @Autowired HelloService helloService; public void hello() { //반환된 member 엔티티는 준영속 상태 -- 4 Member member = helloService.logic(); } }

@Service class HelloService { @PersistenceContext //엔티티 매니저 주입 EntityManager em; @Autowired Repository1 repository1; @Autowired Repository2 repository2; //트랜잭션 시작 -- 1 @Transactional public void logic() { repository1.hello(); //member는 영속 상태 -- 2 Member member = repository2.findMember(); return member; } //트랜잭션 종료 -- 3 }

@Repository class Repository1 { @PersistenceContext EntityManager em; public void hello() { em.xxx(); //A. 영속성 컨텍스트 접근 } } @Repository class Repository2 { @PersistenceContext EntityManager em; public Member member() { return em.find(Member.class, "id1"); //B. 영속성 컨텍스트 접근 } }

1. HelloService.logic() 메소드에 @Transactional을 선언해서 트랜잭션을 먼저 시작

2. findMember()를 통해 조회한 member 엔티티는 트랜잭션 범위 안이므로 영속성 컨텍스트 관리 상태, 따라서 영속 상태

3. @Transactional을 선언한 메소드가 정상 종료되면 트랜잭션 커밋, 이때 영속성 컨텍스트를 종료하고 영속성 컨텍스트가 사라졌으므로 엔티티는 준영속 상태

from http://milenote.tistory.com/144 by ccl(A) rewrite - 2021-09-21 11:27:38