파게로그
[실습] Mapping to DDL 본문
자료형 등 메타 정보를 직접 확인하는 과정을 거쳐 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