使用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:exportpom.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:diffpom.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的说明