엔터티 매니저 설정
트랜젝션 관리
비지니스 로직
JAP를 시작하려면 persistence.xml의 설정정보를 사용해서 엔터티 매니저 팩토리를 생성해야한다.
META-INF/persistence.xml에서 persistence-unit을 찾아서 엔터티 매니저 팩토리를 생성한다.
JPA를 동작시키기 위한 기반 객체를 만든다.
<persistence-unit name="jpatest">
<properties>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="javax.persistence.jdbc.user" value="C##GREEDY"/>
<property name="javax.persistence.jdbc.password" value="GREEDY"/>
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<!-- 실행되는 SQL구문을 보기위한 코드, 한줄로 뜨는 SQL 구문을 포맷된 형태로 볼 수 있는 요청 코드 -->
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
엔터티 매니저를 생성할 수 있는 기능을 제공하는 팩토리 클래스
여러 스레드가 동시에 접근 가능하기때문에 서로 다른 스레드간 공유해서 재사용.
시간, 메모리 부담이 크기 때문에 싱글톤으로 생성해서 관리한다.
데이터베이스를 사용하는 Application당 한 개의 EntityManagerFactory를 생성.
사용이 끝난 엔터티 매니저 팩토리는 종료해야한다.
@BeforeAll
public static void initFactory() {
entityManagerFactory = Persistence.createEntityManagerFactory("jpatest");
}
@AfterEach
public void closeManager() {
entityManager.close();
}
엔터티를 저장하는 메모리상의 데이터베이스.
CRUD등 엔티티와 관련된 모든 일을 한다.
동시성 문제가 발생할 수 있기 때문에 스레드간 공유하지 않는다.
사용이 끝난 엔터티 매니저도 종료해야한다.
@BeforeEach
public void initManager() {
entityManager = entityManagerFactory.createEntityManager();
}
@AfterEach
public void closeManager() {
entityManager.close();
}
엔터티를 영구 저장하는 환경을 말한다.
엔터티 매니저에 엔터티를 저장(persist();)하거나 조회(find();)하면, 엔터티 매니저는 영속성 컨텍스트에 엔터티를 보관하고 관리한다.
영속성 엔터티를 Key, Value 방식으로 저장하는 저장소 역할.
key @Id로 매핑한 식별자/ Value는 엔터티 인스턴스
영속성컨텍스트는 엔터티 매니저를 생성할 때 하나 만들어지고,
엔터티 매니저를 통해서 영속성 컨텍스트에 접근, 관리할 수 있다.