====== JPA Schema Generation ======
* Hibernate를 Provider로 사용할 경우의 예에다. 프로그램 코드와 Maven을 통한 생성이 가능하다.
* ''$CLASSPATH/META-INF/persistence.xml'' 파일이 존재한다고 가정한다.
* persistence.xml에 **hibernate.dialect** 가 잘 정의돼 있어야 한다.
* ''No appropriate connection provider encountered'' 에러가 발생하는 것은 Persistence Unit 속성에 ''hibernate.hbm2ddl.auto''이 지정돼 있기 때문이다. 이를 뺄 것.
===== Gradle =====
* [[http://divinespear.github.io/jpa-schema-gradle-plugin/|jpa-schema-gradle-plugin]]
===== JPA 2.1 =====
* [[http://docs.oracle.com/javaee/7/api/javax/persistence/Persistence.html#generateSchema%28java.lang.String,%20java.util.Map%29|javax.persistence.Persistence.generateSchema]]
===== Java 코드를 통한 DDL 생성 =====
* [[http://stackoverflow.com/questions/3393092/schema-export-with-hibernate-annotations|java - Schema export with hibernate annotations - Stack Overflow]]
import java.util.HashMap;
import org.hibernate.ejb.Ejb3Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class JPASchemaExport {
public static void main(String[] args) {
String persistenceUnitName = args[0];
String outputFile = args[1];
Ejb3Configuration cfg = new Ejb3Configuration();
HashMap props = new HashMap();
Ejb3Configuration configured = cfg.configure(persistenceUnitName, props);
SchemaExport se = new SchemaExport(configured.getHibernateConfiguration());
se.setOutputFile(outputFile);
se.setFormat(true|false);
se.setDelimiter(";");
se.create(true, false);
}
}
* [[http://java.dzone.com/articles/how-generate-schema-creation|How Generate Schema Creation]] 같은 예제도 있었네.
===== Maven Hibernate3 플러그인을 통한 생성 =====
* 2012년 1월 현재 Maven Hibernate3 2.2 플러그인은 의존성(dependency) 문제가 많다. 그래서 플러그인에 대한 의존성을 따로 명시해 주어야만 한다. 안그러면 다음과 같은 오류를 만나게 되며, core의 의존성을 해결하더라도 xerces, validator등의 의존성까지도 명시하지 않으면 계속해서 다른 오류가 발생한다.
Caused by: org.apache.maven.plugin.PluginExecutionException:
Execution default of goal org.codehaus.mojo:hibernate3-maven-plugin:2.2:hbm2ddl failed:
sun.reflect.annotation.EnumConstantNotPresentExceptionProxy
* [[http://www.jroller.com/mert/entry/dependencies_for_hbm2ddl_plugin|Dependencies for hbm2ddl plugin]]
* [[http://stackoverflow.com/questions/2734971/hibernate3-maven-plugin-dependencies-for-newer-version-of-hibernate|hibernate3-maven-plugin dependencies for newer version of hibernate]]
org.codehaus.mojo
hibernate3-maven-plugin
2.2
hbm2ddl
jpaconfiguration
[[PERSISTENCE_UNIT_NAME]]
schema.ddl
true
true
false
true
xerces
xercesImpl
2.9.1
org.hibernate
hibernate-core
3.6.0.Final
org.hibernate
hibernate-entitymanager
3.6.0.Final
org.hibernate
hibernate-validator
4.1.0.Final
* 이렇게 설정하고서 ''mvn hibernate3:hbm2ddl'' 명령을 실행하면된다.
* **''jpaconfiguration''** 이 부분의 값을 ''annotationconfiguration''으로 변경하면 JPA가 아닌 Hibernate Annotation API로 간주하게 바뀐다.
* **''false''**의 값이 true이면 Database에 대고 DDL 명령을 실행하려들게 되므로 주의!
===== 읽어보기 =====
* [[http://jandrewthompson.blogspot.kr/2009/10/how-to-generate-ddl-scripts-from.html|Andrew Thompson's Blog: How To Generate DDL Scripts from Hibernate]]
* [[http://stackoverflow.com/questions/3393092/schema-export-with-hibernate-annotations|java - Schema export with hibernate annotations - Stack Overflow]]
* [[http://www.thoughts-on-java.org/standardized-schema-generation-data-loading-jpa-2-1/|Standardized schema generation and data loading with JPA 2.1]]