使用Hibernate / Spring生成数据库更新脚本
我有一个项目,我们依靠hibernate来更新数据库(hibernate.hbm2ddl.auto = update)…甚至在prod …我正在迁移它以使用liquibase。
我唯一担心的是并非每个人都是我团队中的sql guru,所以我正在寻找一种简单的方法来生成hibernate在更新数据库时会做的sql脚本。
我们都使用Intellij IDEA但无法找到此function。
你知道任何能够做到这一点的工具吗?
谢谢
要从映射中实际显示Hibernate生成的脚本,您可以:
-
正如Andrei I所建议的那样,将这两行添加到application.properties:
spring.jpa.hibernate.ddl-auto=validate logging.level.org.hibernate.tool.hbm2ddl=DEBUG
Hibernate 4.3的源代码: SchemaUpdate.java
-
或使用以下代码手动生成这些脚本:
LocalSessionFactoryBuilder sessionFactory = new LocalSessionFactoryBuilder(dataSource); sessionFactory.scanPackages("your.package.containing.entities"); Dialect dialect = new MySQL5Dialect(); // select your dialect DatabaseMetadata metadata = new DatabaseMetadata(dataSource.getConnection(), dialect, sessionFactory); List
scripts = sessionFactory.generateSchemaUpdateScriptList(dialect, metadata); Formatter formatter = FormatStyle.DDL.getFormatter(); for (SchemaUpdateScript script : scripts) { System.err.println(formatter.format(script.getScript()) + ";"); }
您甚至可以在@Test中添加此代码,如此处所述。
祝你好运!
好吧,我不知道一个非常简单的解决方案,但可能以下内容将帮助您:
在本地计算机上,您的日志记录库可以显示DDL查询。 例如 , 这里看一个示例 , 这里是hibernate日志类别 。
保存对本地数据库的所有更改(使用hibernate.hbm2ddl.auto=update
)后,您将需要输出。 在生产中使用hibernate.hbm2ddl.auto=validate
。
最终,您可能会考虑在特殊的服务器实例上执行此操作,并将所有DDL日志记录数据保存在特殊文件中。
你还可以检查hibernate在hibernate.hbm2ddl.auto=validate
时是否放置更新查询。
请看下面的文章:
来自Hibernate的模式生成脚本
它有点旧,但调整了一下应该做的伎俩:
- 将“create”替换为配置对象中的“update”
- 调整域的基本包名称
- 只用你需要的方言生成它。 在示例中,三种方言用于Oracle,MySQL和HSQL。
祝好运
使用mvn hibernate4:export
和pom.xml
转储的完整模式:
de.juplo hibernate4-maven-plugin 1.1.0 org.hibernate.dialect.MySQLDialect ; SCRIPT ${project.build.directory}/schema-hibernate4-maven-plugin.sql
您可以复制必要的部分。
使用LiquiBase,您可以通过mvn liquibase:diff
和pom.xml
相应部分在DB和Hibernate映射文件/注释之间生成差异来获得更多选项:
org.liquibase liquibase-maven-plugin ${liquibase.version} ${basedir}/src/main/resources/sql/master.xml ${liquibase.profile} false debug utf-8 com.mysql.jdbc.Driver testx testx migration.sql hibernate:spring:com.app.domain?dialect=org.hibernate.dialect.MySQLDialect changelogDiff.xml tables,views,columns,indexes,foreignkeys,primarykeys,uniqueconstraints org.springframework.data spring-data-jpa ${spring-data.version} org.liquibase.ext liquibase-hibernate4.2 3.5
您可以阅读我关于http://tips.defun.work/liquibase.html的说明
- hibernate中的Javassist失败:无效的常量类型:60
- StAX – 从xml读取base64字符串到db
- 为多个模式中的实体生成Liquibase-hibernate changelog
- 在Hibernate中:是否可以为实体混合注释和XML配置?
- Java 9,Hibernate和java.sql / javax.transaction
- Hibernate强制时间戳持续/加载为UTC
- Spring Data REST – 检测到具有相同关系类型的多个关联链接
- org.hibernate.internal.util.config.ConfigurationException:找不到cfg.xml资源
- com.thoughtworks.xstream.converters.ConversionException