[Spring] JPA 스프링 연동

2020. 8. 13. 02:21Spring/Spring

1. JPA 스프링 연동

1) 프로젝트 변경

기존의 BoardWeb 프로젝트를 JPA 프로젝트로 변환한다. 이후 생성된 persistence.xml파일을 확인한다.

프로젝트 변경

2) 라이브러리 추가

pom.xml에 Spring ORM 라이브러리와 하이버네이트 라이브러리를 추가한다.

pom.xml

pom.xml

3) JPA 설정 파일

/src/main/java/META-INF/
persistence.xml

persistence.xml

4) 엔티티 매핑 설정

BoardVO 클래스에 JPA가 제공하는 어노테이션으로 엔티티 매핑을 설정한다.

/src/main/java/
BoardVO.java

BoardVO.java

5) 스프링 JPA 연동

스프링과 JPA를 연동하기 위해 두 개의 클래스를 스플이 설정 파일을 등록한다. 연동에 필요한 JPA 벤더를 지정할 때 사용하는 JpaVendorAdapter 클래스를 가정 먼저 등록하게 되는데, 하이버네이트 JPA 구현체를 사용하기에 HibernateJpaVendorAdaptor를 등록한다.

 

JPA를 이용하여 DAO 클래스를 구현하기 위해 LocalContainerEntityManagerFactoryBean 클래스를 등록한다. 그리고 DataSource와 JpaVendorAdapter를 의존성 주입한다.

/src/main/resources/
applicationContext.xml

applicationContext.xml

다른 방법으로는, LocalContainerEntityManagerFactoryBean 클래스를 등록할 때 영속성 유닛 관련된 설정을 동시에 처리할 수 있다. 이 방법을 사용할 경우에는 앞서 추가한 persistence.xml 파일은 제거해도 무관하다.

/src/main/resources/
applicationContext.xml

applicationContext.xml

6) 트랜잭션 설정

이전에 DataSourceTransactionManager 클래스를 등록하여 사용했었다. 이는 Spring JDBC나 Mybatis를 이용하여 데이터베이스 연동을 처리할 때 사용하는 관리자이다. 하지만 JPA를 이용하여 데이터베이스 연동을 처리하고 있기 때문에 관리자를 JpaTransactionManager로 변경해야한다.

 

DataSourceTransactionManager에서 JpaTransactionManager로 변경하고 JpaTransactionManager가 LocalContainerEntityManagerFactoryBean 객체를 참조하도록 의존성 주입을 설정하면 된다.

/src/main/resources/
applicationContext.xml

applicatiionContext.xml

7) DAO 클래스 구현

JPA를 이용하여 DAO 클래스를 구현할 때 EntityManager 객체를 사용해야하는데 JPAProject에서는 EntityManagerFactory로부터 EntityManager 객체를 직접 얻어냈었지만 JPA 단독으로 사용하지 않고 스프링과 연동할 때는 EntityManagerFactory에서 EntityManager를 직접 생성하는것이 아닌 스프링 컨테이너가 제공하는 EntityManager를 사용해야한다.

 

@PersistenceContext는 스프링 컨테이너가 관리하는 EntityManager 객체를 의존성 주입할 때 사용하는 어노테이션이다.

/src/main/java/
BoardDAOJPA.java

BoardDAOJPA.java

클래스를 작성하다보면 경고가 발생하는 경우가 있다.

경고 및 해결

문제
해결

8) BoardServiceImpl

이전에 에러를 확인하기 위해 insertBoard() 메서드에 작성한 내용을 제거하고, EntityManager 객체를 이용하여 BoardDAOJPA 클래스를 추가로 구현한다.

/src/main/java/
BoardServiceImpl.java

BoardServiceImpl.java

톰캣 서버를 재구동 할 경우 시퀸스와 테이블이 삭제되고 다시 만들어지면서 동작하게 된다.


[참고] www.monkeyways.asia/wp/programming/java-expression-type-list-needs-unchecked-conversion-conform-list/595/

[참고] 스프링 퀵 스타트

728x90

'Spring > Spring' 카테고리의 다른 글

[Spring] 어노테이션 기반 프로젝트 진행 순서  (0) 2020.08.13
[Spring] XML 기반 프로젝트 진행 과정  (0) 2020.08.13
[Spring] JPA (2)  (0) 2020.08.12
[Spring] JPA (1)  (0) 2020.08.12