twocowsong

DB스키마 자동 생성 본문

IT/JPA

DB스키마 자동 생성

WsCode 2022. 5. 10. 20:39

깃허브 정리 URL : https://github.com/sWineTake/jpa.git

 

GitHub - sWineTake/jpa: 자바 ORM 표준 JPA 프로그래밍 - 김영한

자바 ORM 표준 JPA 프로그래밍 - 김영한. Contribute to sWineTake/jpa development by creating an account on GitHub.

github.com

JPA는 DB 스키마를 자동으로 생성하는 기능을 지원합니다.

클래스 매핑 정보를 보면 어떤 테이블에 어떤 컬럼을 사용하는지 알 수 있습니다.

(myBatis를 사용할 때는 xml까지 가서 알아야 했지만 그 불편한점이 없어졌습니다.)

JPA는 이 매핑정보와 DB방언을 사용해서 DB 스키마를 생성합니다.

 

스키마 자동 생성을 기능을 사용하기전에 persistence.xml에 다음 속성을 추가해야합니다.

<property name="hibernate.hbm2ddl.auto" value="create"/>

위 속성을 추가하면 애플리케이션 실행 시점에 DB테이블을 자동으로 생성합니다.

 

콘솔에 실행되는 테이블 DDL을 출력하기위해서는 persistence.xml에 다음 속성을 추가해야합니다.

<property name="hibernate.show_sql" value="true"/>

 

애플리키에션 실행시 다음과 같은 DDL이 출력되며 실제 테이블이 생성이 됩니다.

DEBUG org.hibernate.SQL -

    create table MEMBER (
        ID varchar(255) not null,
        age integer,
        createDate datetime(6),
        description longtext,
        lastModifiedDate datetime(6),
        roleType varchar(255),
        NAME varchar(255),
        primary key (ID)
    ) engine=InnoDB

Hibernate:

    create table MEMBER (
	ID varchar(255) not null,
        age integer,
        createDate datetime(6),
        description longtext,
        lastModifiedDate datetime(6),
        roleType varchar(255),
        NAME varchar(255),
        primary key (ID)
   ) engine=InnoDB

만약 테이블이 없는경우라면 위와같이 실행되고 없는경우라면 아래와같이 실행됩니다.

Hibernate:
	drop table if exists MEMBER
Hibernate:

    create table MEMBER (
	ID varchar(255) not null,
        age integer,
        createDate datetime(6),
        description longtext,
        lastModifiedDate datetime(6),
        roleType varchar(255),
        NAME varchar(255),
        primary key (ID)
) engine=InnoDB

기존 테이블 삭제 후 다시 생성한것을 알 수 있습니다.

방금 추가한 roleType은 VARCHAR 타입으로 createdDate, lastModifiedDate는 datetime타입으로, description은 longtext타입으로 생성되었습니다.

 

자동 생성되는 DDL은 지정한 DB방언에 따라 달라집니다.

(서적에는 H2 DB로 하였기때문에 타입이 많이다릅니다.)

 

스키마는 자동 생성 기능을 사용하면 애플리케이션 실행 시점에 DB테이블이 자동으로 생성되므로 개발자가 테이블을 직접 생성하는 수고를 덜 수 있습니다.

하지만 스키마 자동 생성 기능이 만든 DDL은 운영 환경에서 사용할 만큼 완벽하지는 않으므로 개발 환경에서 사용하거나 매핑을 어떻게 해야하는지 참고하는 정도로만 사용하는것이 좋습니다.

 

 

 

 

'IT > JPA' 카테고리의 다른 글

기본키 매핑 - 기본 키 생성 전략  (0) 2022.05.11
DDL생성 기능 - 제약 조건, 유니크 제약 조건  (0) 2022.05.10
@Table  (0) 2022.05.09
@Entity  (0) 2022.05.09
엔티티 매핑 시작  (0) 2022.05.09