用Hibernate / Spring生成数据库更新脚本 [英] Generate a database update scripts with Hibernate/Spring
问题描述
我有一个项目,我们用它来依赖hibernate来更新数据库(hibernate.hbm2ddl.auto = update)...甚至在产品...
我正在迁移它来使用liquibase。
我唯一担心的不是每个人都是我团队中的sql guru,所以我正在寻找一种简单的方法来生成休眠会执行的sql脚本正在更新数据库。
我们都使用Intellij IDEA,但找不到此功能。
你知道任何能够做到这一点的工具吗?
谢谢
为了实际显示Hibernate从映射中生成的脚本,您可以:按照Andrei I的建议,将这两个参数添加到 行到您的application.properties:
spring.jpa.hibernate.ddl-auto =验证
logging.level。 org.hibernate.tool.hbm2ddl = DEBUG
Hibernat的来源e 4.3: SchemaUpdate.java
-
或者使用以下代码手动生成这些脚本:
LocalSessionFactoryBuilder sessionFactory = new LocalSessionFactoryBuilder(dataSource);
sessionFactory.scanPackages(your.package.containing.entities);
方言dialect = new MySQL5Dialect(); //选择你的方言
DatabaseMetadata metadata = new DatabaseMetadata(dataSource.getConnection(),dialect,sessionFactory);
列表< SchemaUpdateScript> scripts = sessionFactory.generateSchemaUpdateScriptList(方言,元数据);
Formatter formatter = FormatStyle.DDL.getFormatter(); (SchemaUpdateScript script:scripts)
{
System.err.println(formatter.format(script.getScript())+;);
}
此代码位于@Test中,如 here 。
祝你好运!
I have a project where we use to rely on hibernate to update database with changes (hibernate.hbm2ddl.auto=update)... even on prod... I am migrating that to use liquibase instead.
My only concern is that not everyone is a sql guru in my team, so I am looking for a simple way to generate the sql script that hibernate would have done if it was updating the database.
We are all using Intellij IDEA but couldn't find this feature.
Do you know any tool capable of doing that?
Thank you
To actually display the scripts generated by Hibernate from your mappings, you can:
as suggested by Andrei I, add those two lines to your application.properties:
spring.jpa.hibernate.ddl-auto=validate logging.level.org.hibernate.tool.hbm2ddl=DEBUG
Source for Hibernate 4.3: SchemaUpdate.java
or manually generate those scripts with the following code:
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<SchemaUpdateScript> scripts = sessionFactory.generateSchemaUpdateScriptList(dialect, metadata); Formatter formatter = FormatStyle.DDL.getFormatter(); for (SchemaUpdateScript script : scripts) { System.err.println(formatter.format(script.getScript()) + ";"); }
You can even add this code in a @Test, as described here.
Good luck!
这篇关于用Hibernate / Spring生成数据库更新脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!