Spring(Boot) 에서 JPA EntityManager 를 얻어오는 방법 - Java
한줄정리
@PersistenceContext
private EntityManager entityManager;
@PersistenceContext 어노테이션이 스프링 컨테이너에 등록된 빈을 찾아 주입 해줍니다.
EntityManager 사용
Java 에서 EntityManager는 다음과 같이 사용했을 겁니다.
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("hello");
EntityManager entityManager = entityManagerFactory.createEntityManager();
EntityTransaction entityTransaction = entityManager.getTransaction();
entityTransaction.begin();
try {
// ... 작업
// 트랜젝션 커밋
entityTransaction.commit();
} catch (Exception e) {
e.printStackTrace();
entityTransaction.rollback();
} finally {
entityManager.close();
}
entityManagerFactory.close();
코드를 보면 알 수 있지만
트랜잭션을 우리가 직접 관리합니다.
필요에 따라서 영속성 컨텍스트를 비워야 한다면 중간에 다음과 같은 코드를 추가해줍니다.
entityManager.flush();
entityManager.clear();
영속성 컨텍스트의 1차 캐시 내용을 모두 DB에 반영하고 영속성 컨텍스트를 비우라는 로직입니다.
그런데 스프링 프레임워크 내에서 JPA 를 사용할 때에는 트랜젝션을 관리하는 일을 프레임워크가 처리해줍니다.
따라서 애플리케이션 초기화 시점에 EntityManager를 Bean으로 등록 하는데
이렇게 등록된 EntityManager 빈을 어노테이션의 도움을 받아 주입 하는 것 입니다.
@Autowired 와 동일한 기능이나 스프링 부트 낮은 버전에서는 @Autowired 어노테이션이 동작하지 않을 수 있습니다.
'개발 > JAVA' 카테고리의 다른 글
DTO, Entity 간 필드 값 복사하기 (Object 필드 값 복사) - Java (0) | 2021.07.21 |
---|---|
자바 bean 순환 참조 문제 (0) | 2021.06.03 |
좋은 주석을 다는 법 - Java (0) | 2021.05.24 |
POST, GET Method 요청을 받는 DTO, Setter가 필요할까? (0) | 2021.05.24 |
List<Integer> to int[] (Integer List to int Array) 변환 방법 (0) | 2021.05.07 |
댓글
이 글 공유하기
다른 글
-
DTO, Entity 간 필드 값 복사하기 (Object 필드 값 복사) - Java
DTO, Entity 간 필드 값 복사하기 (Object 필드 값 복사) - Java
2021.07.21 -
자바 bean 순환 참조 문제
자바 bean 순환 참조 문제
2021.06.03 -
좋은 주석을 다는 법 - Java
좋은 주석을 다는 법 - Java
2021.05.24 -
POST, GET Method 요청을 받는 DTO, Setter가 필요할까?
POST, GET Method 요청을 받는 DTO, Setter가 필요할까?
2021.05.24