【发布时间】:2017-10-30 18:40:46
【问题描述】:
我们有一个使用 JPA 和 Hibernate 4 for ORM 的 Java Spring 项目。我们专门使用 Java 配置,所以我们没有任何 hibernate.properties 或 persistence.xml 映射文件。
我们还使用 Spring 的 Jsr310JpaConverters 和一些实现 javax.persistence.AttributeConverter 的自定义属性转换器。包扫描会自动拾取自定义转换器。
除此之外,我们的设置相当标准,基本上只是
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackageClasses = BasePackageMarker.class, repositoryBaseClass = InternalRepositoryImpl.class)
public class JpaConfig {
// values loaded from property file
public Properties jpaProperties() {
Properties jpaProperties = new Properties();
jpaProperties.setProperty(Environment.DIALECT, dialect);
jpaProperties.setProperty(Environment.HBM2DDL_AUTO, getHbm2ddlAuto());
// ...
return jpaProperties;
}
@Bean
public DataSource dataSource() {
HikariConfig config = new HikariConfig();
config.setDriverClassName(driver);
config.setJdbcUrl(url);
config.setUsername(username);
config.setPassword(password);
// ...
return new HikariDataSource(config);
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setDataSource(dataSource);
entityManagerFactoryBean.setPackagesToScan(
BasePackageMarker.class.getPackage().getName(),
Jsr310JpaConverters.class.getPackage().getName()
);
entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
entityManagerFactoryBean.setJpaProperties(jpaProperties());
return entityManagerFactoryBean;
}
// ...
}
我正在寻找一种方法来运行 Hibernate 的 SchemaExport 来创建我们的数据库模式,而无需运行 Tomcat 或 Spring 应用程序,其配置与使用 hbm2ddl=create 启动应用程序的配置相同,特别是查找所有实体类和属性转换器。我想用 Maven 运行它,但是一旦我知道从哪里开始,我就可以弄清楚这部分。
我为 Hibernate 3 或 XML 配置找到了许多过时的答案和库,似乎对我们的设置没有任何作用。我确定答案已经存在,但此时我很困惑,不知道该尝试什么。有什么解决办法或者指点吗?
【问题讨论】:
-
也许这个github.com/jpdigital/hibernate5-ddl-maven-plugin就是你要搜索的东西
-
你可以在构建时调用一些东西——比如那个 maven 插件,或者 gradle 的东西。但是我们使用的是flyway,其他一些项目是liquibase。这是一个单独的工具/解决方案,它允许版本控制,将您的架构滚动到正确的版本 - 每次部署。
-
@AngeloImmedia 谢谢,我会看看。我们使用的是 hibernate 4,但该用户在 Github 上也有一个 hibernate4-ddl-maven-plugin,也许可以。
-
@MichałZaborowski 我们也在使用 Liquibase。事实上,我要求这个的部分原因是在不同修订/分支的模式之间创建一个 Liquibase 差异。
-
@DarioSeidl - 在这种情况下,我会在你的构建系统中创建专门的任务......
标签: java spring hibernate jpa schemaexport