两年前,我正在开发一个项目,使用:
- 弹簧 4.0.3.RELEASE
- jpa 2.0
- 休眠 4.2.7.Final
- java 1.6.X
该项目有一个 Maven 任务 hibernate3-maven-plugin,它允许我们生成数据库模式,而无需连接到数据库 (MySQL)。
现在我们正在升级这个项目:
- java 1.8
- jpa 2.1
- 弹簧 4.2.4.发布
- 休眠 5.0.6.Final
据我所知,hibernate3-maven-plugin 不适用于 JPA 2.1 和 hibernate > 4.3。
我发现的所有解决方案都需要连接到数据库。
例如:从 JPA 带注释的实体类自动生成数据模式 https://stackoverflow.com/questions/297438/auto-generate-data-schema-from-jpa-annotated-entity-classes.
有谁知道如何离线生成数据库架构?
我所拥有的只是一个 persistence.xml ,其中列出了所有实体类。
我遵循你的想法,将 h2 与 Mysql 方言一起使用,但使用 JPAPersistence.generateSchema(...)
.
它确实有效,除非所有命令都没有用半栏分隔......
如何使用 JPA 2.1 来完成此操作?
否则我会改用你的解决方案。
import java.util.Properties;
import javax.persistence.Persistence;
import javax.persistence.PersistenceException;
import org.hibernate.jpa.AvailableSettings;
/**
* Generate DDL with hibernate 4+/5:
* http://stackoverflow.com/questions/27314165/generate-ddl-script-at-maven-build-with-hibernate4-jpa-2-1/27314166#27314166
* @author dmary
*
*/
public class Jpa21SchemaExport {
/**
*
*/
public Jpa21SchemaExport() {
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
execute(args[0], args[1]);
System.exit(0);
}
public static void execute(String persistenceUnitName, String destination) {
System.out.println("Generating DDL create script to : " + destination);
final Properties persistenceProperties = new Properties();
// XXX force persistence properties : remove database target
persistenceProperties.setProperty(org.hibernate.cfg.AvailableSettings.HBM2DDL_AUTO, "");
persistenceProperties.setProperty(AvailableSettings.SCHEMA_GEN_DATABASE_ACTION, "none");
// XXX force persistence properties : define create script target from metadata to destination
// persistenceProperties.setProperty(AvailableSettings.SCHEMA_GEN_CREATE_SCHEMAS, "true");
persistenceProperties.setProperty(AvailableSettings.SCHEMA_GEN_SCRIPTS_ACTION, "create");
persistenceProperties.setProperty(AvailableSettings.SCHEMA_GEN_CREATE_SOURCE, "metadata");
persistenceProperties.setProperty(AvailableSettings.SCHEMA_GEN_SCRIPTS_CREATE_TARGET, destination);
persistenceProperties.setProperty(AvailableSettings.JDBC_DRIVER,"org.h2.Driver");
persistenceProperties.setProperty(AvailableSettings.JDBC_URL, "jdbc:h2:mem:export");
persistenceProperties.setProperty(AvailableSettings.JDBC_USER, "sa");
persistenceProperties.setProperty(AvailableSettings.JDBC_PASSWORD, "");
persistenceProperties.setProperty(org.hibernate.cfg.AvailableSettings.DIALECT, "com.wiztivi.sdk.persistence.MySQL5InnoDBUTF8Dialect");
try
{
Persistence.generateSchema(persistenceUnitName, persistenceProperties);
} catch (PersistenceException pe)
{
System.err.println("DDL generation failed: ");
pe.printStackTrace(System.err);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)