gpt4 book ai didi

hibernate - 如何多次重复执行特定命令

转载 作者:行者123 更新时间:2023-12-02 05:14:58 24 4
gpt4 key购买 nike

只要对JPA实体类进行了修改,以下代码段都会为特定数据库生成create / drop sql。

如何执行与“for”操作等效的操作,其中以下代码可用于为所有受支持的数据库(例如H2,MySQL,Postgres)生成sql

目前,我必须每次修改db.groupId,db.artifactId,db.driver.version才能生成sql文件

            <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>${hibernate3-maven-plugin.version}</version>

<executions>
<execution>
<id>create schema</id>
<phase>process-test-resources</phase>
<goals>
<goal>hbm2ddl</goal>
</goals>
<configuration>
<componentProperties>
<persistenceunit>${app.module}</persistenceunit>
<drop>false</drop>
<create>true</create>
<outputfilename>${app.sql}-create.sql</outputfilename>
</componentProperties>
</configuration>
</execution>
<execution>
<id>drop schema</id>
<phase>process-test-resources</phase>
<goals>
<goal>hbm2ddl</goal>
</goals>
<configuration>
<componentProperties>
<persistenceunit>${app.module}</persistenceunit>
<drop>true</drop>
<create>false</create>
<outputfilename>${app.sql}-drop.sql</outputfilename>
</componentProperties>
</configuration>
</execution>
</executions>

<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate-core.version}</version>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j-api.version}</version>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>${slf4j-nop.version}</version>
</dependency>

<dependency>
<groupId>${db.groupId}</groupId>
<artifactId>${db.artifactId}</artifactId>
<version>${db.driver.version}</version>
</dependency>
</dependencies>

<configuration>
<components>
<component>
<name>hbm2cfgxml</name>
<implementation>annotationconfiguration</implementation>
</component>
<component>
<name>hbm2dao</name>
<implementation>annotationconfiguration</implementation>
</component>
<component>
<name>hbm2ddl</name>
<implementation>jpaconfiguration</implementation>
<outputDirectory>src/main/sql</outputDirectory>
</component>
<component>
<name>hbm2doc</name>
<implementation>annotationconfiguration</implementation>
</component>
<component>
<name>hbm2hbmxml</name>
<implementation>annotationconfiguration</implementation>
</component>
<component>
<name>hbm2java</name>
<implementation>annotationconfiguration</implementation>
</component>
<component>
<name>hbm2template</name>
<implementation>annotationconfiguration</implementation>
</component>
</components>
</configuration>
</plugin>

最佳答案

我假设您一次只有一个数据库处于 Activity 状态。如果这是一个有效的假设,则您实际上并不需要循环,而是需要能够在数据库之间进行切换。

您可以通过在概要文件中声明特定于DB的属性,然后激活相关概要文件来实现。

下面的配置显示了如何为您提到的3个数据库设置配置文件,并在未指定的情况下使用默认值。您可以忽略默认值,除非声明配置文件,否则构建将失败。

您可以从命令行激活每个配置文件,如下所示:

mvn test -P h2
mvn test -P mysql
mvn test -P postgresql

<profiles>
<profile>
<id>h2</id>
<properties>
<db.groupId>com.h2database</db.groupId>
<db.artifactId>h2</db.artifactId>
<db.version>1.1.117</db.version>
</properties>
</profile>
<profile>
<id>mysql</id>
<properties>
<db.groupId>mysql</db.groupId>
<db.artifactId>mysql-connector-java</db.artifactId>
<db.version>5.1.6</db.version>
</properties>
</profile>
<profile>
<id>postgresql</id>
<properties>
<db.groupId>postgresql</db.groupId>
<db.artifactId>postgresql</db.artifactId>
<db.version>8.3-603.jdbc4</db.version>
</properties>
</profile>
</profiles>
...
<!--default database, say mysql-->
<properties>
<db.groupId>mysql</db.groupId>
<db.artifactId>mysql-connector-java</db.artifactId>
<db.version>5.1.6</db.version>
</properties>

您可以基于环境变量的值来激活概要文件,例如,如果ACTIVE_DB环境变量设置为“h2”,则以下配置将激活h2概要文件。
  <profile>
<id>h2</id>
<activation>
<property>
<name>ACTIVE_DB</name>
<value>h2</value>
</property>
</activation>
<properties>
<db.groupId>com.h2database</db.groupId>
<db.artifactId>h2</db.artifactId>
<db.version>1.1.117</db.version>
</properties>
</profile>

关于hibernate - 如何多次重复执行特定命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1387873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com