web/JPA

JPA persistence 설정 및 Entity manager 설명

반응형

JPA를 사용하기 위해서는 persistence.xml을 이용하여 사용 설정을 해야한다.

persistence-unit에 이름을 설정하고 각종 데이터베이스를 설정한다.  구조는 다음과 같이 되어있다.

1
2
3
4
5
<persistence-unit name="wedulpos">
 <properties>
   <!-- 드라이버, 연결정보 및 dialect 설정>
 </properties>
</persistence-unit>
cs


그리고 부가적인 속성으로 hibernate 속성을 설정해줄 수 있다. 해당 속성은 하이버네이트 전용 속성이다.

hibernate 속성

hibernate.show_sql : 하이버네이트가 실행한 SQL 출력
hibernate.format_sql : 하이버네이트가 실행한 SQL 보기 쉽게 정렬한다.
hibernate.use_sql_comments :  쿼리를 출력할  주석도 함꼐 출력한다.
hibernate.id.new_generator_mappings : JPA 표준에 맞춘 새로운  생성 전략을 사용.



Spring boot에서 persistence.xml

지금까지는 자바 프로젝트에서 설정을 하였다면 스프링 부트에서는 어떨까? 동일하게 persistence.xml을 만들고 해야할까? 자바 스프링 부트에서는 starter-data-jpa를 로드하면 별도의 persistence.xml을 사용할 필요가 없다. 하지만 별도의 persistence.xml을 설정하고 싶다면 이 부분을 참고하자.
 https://docs.spring.io/spring-boot/docs/current/reference/html/howto-data-access.html#howto-use-traditional-persistence-xml 

하지만 굳이 힘들게 설정하고 싶지 않다면 application.properties에 설정을 입력함으로써 사용할 수 있다.http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html#boot-features-connect-to-production-database


EntityManagerFactory와 EntityManager
엔티티 매니저 팩토리는 엔티티 매니저를 만드는 공장으로써 이 객체를 계속 만들어서 사용하면 비용이 크다. 그래서 엔티티 매니저 팩토리는 하나를 생성하여 공유하고 엔티티 매니저는 절대 여러 스레드가 동시에 접근해서 사용하면 안된다. 엔티티 매니저는 생성되었다고 바로 커넥션이 생기는 것이 아니다. 연결이 필요하고자 할때 연결이 진행되는 lazy방식으로 진행되고 트랜잭션이 시작될 때 커넥션이 획득된다.


Persistence Context(영속성 컨텍스트)
- 영속성 컨텍스트는 엔티티를 영구 저장하는 환경으로써 EntityManager로 엔티티를 저장하거나 조회하면 EntityManager는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.


1
2
3
4
5
@PersistenceContext
private EntityManager entityManager;
 
// 등록
em.persist(member);
cs


영속성 컨텍스트는 엔티티를 식별자 값으로 구분한다. 그래서 해당 엔티티는 @Id라는 식별자가 있어야한다 또한 영속성 컨텍스트에서 엔티티가 반영되려면 트랜잭션이 커밋되는 순간에 flush되는 순간에 처리한다.


다음번에는 영속석 컨텍스트를 사용해서 엔티티를 조회, 쓰기 등을 처리해보자.




반응형