Java 使用Hibernate/Spring生成数据库更新脚本
我有一个项目,我们使用hibernate来用更改更新数据库(hibernate.hbm2ddl.auto=update)。。。即使在生产。。。 我将其迁移到使用liquibase 我唯一关心的是,在我的团队中,并不是每个人都是sql专家,因此我正在寻找一种简单的方法来生成sql脚本,hibernate在更新数据库时会这样做 我们都在使用Intellij IDEA,但找不到此功能 你知道有什么工具能做到这一点吗Java 使用Hibernate/Spring生成数据库更新脚本,java,spring,hibernate,jpa,liquibase,Java,Spring,Hibernate,Jpa,Liquibase,我有一个项目,我们使用hibernate来用更改更新数据库(hibernate.hbm2ddl.auto=update)。。。即使在生产。。。 我将其迁移到使用liquibase 我唯一关心的是,在我的团队中,并不是每个人都是sql专家,因此我正在寻找一种简单的方法来生成sql脚本,hibernate在更新数据库时会这样做 我们都在使用Intellij IDEA,但找不到此功能 你知道有什么工具能做到这一点吗 谢谢好吧,我不知道一个非常简单的解决方案,但以下内容可能会对您有所帮助: 在本地计算机
谢谢好吧,我不知道一个非常简单的解决方案,但以下内容可能会对您有所帮助: 在本地计算机上,启用日志库以显示DDL查询。例如,看一看,然后 保存对本地数据库的所有更改(使用
hibernate.hbm2ddl.auto=update
)后,您将需要输出。在生产中使用hibernate.hbm2ddl.auto=validate
<>最后,您可以考虑在服务器的一个特殊实例上执行此操作,所有DDL日志记录数据保存在一个特殊文件中。
您还可以检查hibernate是否在
hibernate.hbm2ddl.auto=validate
时进行更新查询。请查看以下文章:
它有点旧,但稍微调整一下就可以了:
- 将配置对象中的“创建”替换为“更新”
- 调整域的基本包名称
- 仅使用您需要的方言生成它。在本例中,Oracle、MySQL和HSQL使用三种方言
祝您好运使用
mvn hibernate4:export
和pom.xml
转储完整模式:
<!-- To export full DDL schema as it seeing by Hibernate run: mvn hibernate4:export -->
<plugin>
<!-- http://mydevnotes.nicus.it/2013/03/generate-ddl-with-maven-jpa-hibernate-4.html -->
<groupId>de.juplo</groupId>
<artifactId>hibernate4-maven-plugin</artifactId>
<version>1.1.0</version>
<configuration>
<hibernateDialect>org.hibernate.dialect.MySQLDialect</hibernateDialect>
<delimiter>;</delimiter>
<target>SCRIPT</target>
<outputFile>${project.build.directory}/schema-hibernate4-maven-plugin.sql</outputFile>
</configuration>
</plugin>
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>${liquibase.version}</version>
<configuration>
<changeLogFile>${basedir}/src/main/resources/sql/master.xml</changeLogFile>
<propertyFile>${liquibase.profile}</propertyFile>
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
<logging>debug</logging>
<outputFileEncoding>utf-8</outputFileEncoding>
<driver>com.mysql.jdbc.Driver</driver>
<!-- <url>jdbc:mysql://localhost:3306/app?autoReconnect=true&characterEncoding=utf-8</url> -->
<!-- <username>AAAAAA</username> -->
<!-- <password>BBBBBB</password> -->
<defaultSchemaName>testx</defaultSchemaName>
<changelogSchemaName>testx</changelogSchemaName>
<!-- For mvn liquibase:updateSQL -->
<migrationSqlOutputFile>migration.sql</migrationSqlOutputFile>
<referenceUrl>hibernate:spring:com.app.domain?dialect=org.hibernate.dialect.MySQLDialect</referenceUrl>
<diffChangeLogFile>changelogDiff.xml</diffChangeLogFile>
<diffTypes>tables,views,columns,indexes,foreignkeys,primarykeys,uniqueconstraints</diffTypes>
</configuration>
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>${spring-data.version}</version>
</dependency>
<!-- https://github.com/liquibase/liquibase-hibernate/wiki -->
<dependency>
<groupId>org.liquibase.ext</groupId>
<artifactId>liquibase-hibernate4.2</artifactId>
<version>3.5</version>
</dependency>
</dependencies>
</plugin>
您可以阅读我关于的说明,要实际显示Hibernate根据映射生成的脚本,您可以:
- 按照Andrei I的建议,将这两行添加到application.properties中:
spring.jpa.hibernate.ddl-auto=validate logging.level.org.hibernate.tool.hbm2ddl=DEBUG
- 或者使用以下代码手动生成这些脚本:
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()) + ";"); }
LocalSessionFactoryBuilder sessionFactory=newlocalsessionfactorybuilder(数据源); scanPackages(“your.package.containing.entities”); 方言方言=新的MySQL5方言();//选择你的方言 DatabaseMetadata=新的DatabaseMetadata(dataSource.getConnection(),方言,sessionFactory); List scripts=sessionFactory.generateSchemaUpdateScriptList(方言,元数据); Formatter Formatter=FormattStyle.DDL.getFormatter(); for(SchemaUpdateScript脚本:脚本){ System.err.println(formatter.format(script.getScript())+“;”; }
祝你好运 这有用吗:一点也不有用。好的,有了IDEA,您可以生成完整的DB DDL,但需要根据JPA映射更新数据库的增量脚本。jetbrains的工作链接:您有Hibernate 5.2的工作解决方案吗?谢谢