파게로그

[실습] Mapping to DDL 본문

콤퓨타 왕기초/JPA

[실습] Mapping to DDL

파게 2021. 5. 27. 13:48

자료형 등 메타 정보를 직접 확인하는 과정을 거쳐 DDL문까지 JPA가 생성할 수 있다. 애플리케이션 실행 시에, JPA가 데이터베이스 방언까지 고려하여 적절한 DDL을 자동으로 생성하는 것이다. 다만, 이렇게 생성한 DDL은 개발에서만 사용해야 한다. 그나마 validate와 none은 사용할 수 있다고 할지라도, 나머지는 절대 운영 장비에서 사용하면 안 된다.

 

hibernate.hbm2ddl.auto (아마도 hbm은 hibernate mapping to ddl이 아닐까?)

create 기존 테이블 삭제 후 다시 생성(DROP + CREATE)
create-drop CREATE와 같지만, 종료 시점에 테이블을 DROP
update 변경분만 반영
validate 엔티티와 테이블이 정상 매핑되어있는지만 확인
none 사용하지 않음

 

persistence.xml에 다음을 추가한다.

 

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

 

그 뒤 main을 실행하면, 아래와 같은 에러를 만날 수 있다.

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=MyISAM' at line 6

 

위와 같은 에러를 만나게 되는데, type=MyISAM은 MySQL 4.x 버전의 문법으로서, 실제 DB의 버전과 일치하기 때문에 발생한 에러이다. 왜 이런 문법이 들어갔을까? 내가 persistence.xml에서 dialect를 잘못 설정했기 때문이다. 아래에서, MySQLDialect는 MySQL 4.x 이하의 dialect를 사용한다.

 

<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>

 

다음과 같이 바꾸어준다. MySQL 5, 55, 57 모두 가능하다.

 

<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>

 

hibernate.hbm2ddl.auto를 create로 설정해두었을 때에는 다음과 같이 EntityManagerFactory를 생성하는 것만으로도 테이블을 생성하는 SQL문이 자동으로 실행된다.

 

public class Main {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
        emf.close();
    }
}

 

'콤퓨타 왕기초 > JPA' 카테고리의 다른 글

JPA 내부 구조  (0) 2021.06.02
연관관계 매핑  (0) 2021.05.28
실습 3 (Mapping annotations)  (0) 2021.05.27
[실습] JPA in Maven project  (0) 2021.05.27
Why JPA?  (0) 2021.05.26
Comments