2. JPA 설정

Jehyun·2023년 11월 15일
0

JPA

목록 보기
2/3

2. JPA 설정

개발 환경

  • Spring sts 3.9.15
  • DataBase : H2 DB
  • jdk 8
  • Eclipse
  • Maven

Project 생성

Maven Project 생성

  • Group Id : 프로젝트를 모든 프로젝트 사이에서 고유하게 식별하게 해 주는 것이다.
    groupId에는 네이밍 스키마를 적용하도록 한다
    groupId는 package 명명 규칙을 따르도록 한다.
    즉, 최소한 본인이 컨트롤하는 도메인 네임이어야 한다.
    하위 그룹은 얼마든지 추가할 수 있다.
    ex) org.apache.maven, org.apache.commons

  • Artifact Id : 버전 정보를 생략한 jar 파일의 이름이다.
    이름은 원하는 것으로 아무거나 정해도 괜찮다.
    단, 소문자로만 작성하며 특수문자를 사용하지 않는다.
    만약 써드 파티 jar 파일이라면, 할당된 이름을 사용해야 한다.
    ex) maven, commons-math

pom.xml

JPA를 사용하기 위해서는 Hibernate를 사용해야 하는데 JPA의 경우 기술 명세서이지만 Hibernate는 JPA의 구현체이다.

  <dependencies>
    <!-- JPA 하이버네이트 -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.3.10.Final</version>
    </dependency>
    <!-- H2 데이터베이스 -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>2.1.214</version>
    </dependency>

Maven에 hibernate와 H2DB를 추가

Persistence.xml

JPA설정 파일로 파일의 위치가 중요하다.
파일의 위치는 src/main/java//META-INF/persistence.xml 위치에 설정값을 만들어야 시스템이 인식할 수 있다.

하단에 src/main/webapp으로 들어가는 위치에 만들었을 경우 persistence.xml파일을 찾을 수 없다고 한다.

persistence-unit name으로 이름을 설정한다. 해당 이름을 이후에 Main에서 JPA를 호출할 때 name값으로 구분하여 JPA를 가져온다.
속성값에는 Database연결을 위한 JDBC설정값을 해주는데

property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"

해당 property의 경우 DB에 따른 값이 달라지는데

JPA는 DB마다 가지고 있는 특수한 문법들이 있는데 예를 들어 Oracle의 Rownum을 사용하지만 Mysql의 경우 Limit을 사용하고 있다. 이러한 문법의 차이를 해결해주면서 DB에 종속되지 않게 해준다. 이후 DB를 바꿨을 경우에도 해당 value값만 변경해주면 Mybatis처럼 Query문을 모두 변경하지 않아도 된다.

스키마 자동생성 value

create : SessionFactory 시작시 스키마를 삭제하고 다시 생성
create-drop : SessionFactory 종료시 스키마를 삭제
update : SessionFactory 시작시 객체 구성와 스키마를 비교하여 컬럼 추가/삭제 작업을 진행함. 기존의 스키마를 삭제하지 않고 유지.
validate : SessionFactory 시작시 객체구성과 스키마가 다르다면 예외 발생시킴.

이미 DB가 존재하는 경우에는 create, Update는 절대 사용해서는 안된다. 기존 데이터를 모두 지우고 새로 만드는 create와 테스트로 컬럼을 추가하는 경우에도 DB가 일시적으로 멈출 수 있기 떄문에 해당 value는 초기시작 상황이 아니면 사용하면 안된다.

profile
주니어 개발자

0개의 댓글