一尘不染

具有多个数据库供应商支持的Java / Maven / JPA / Hibernate构建的最佳方法?

hibernate

我有一个使用单个数据库的企业应用程序,但是该应用程序需要支持 mysqloraclesql * server
作为安装选项。

为了 保持可移植性, 我们将 JPA批注Hibernate 一起使用。我们还为每个要运行的数据库提供了一个测试平台实例。

该应用程序可以在 Maven中 很好地构建,并且我使用过 hibernate3-maven-plugin
并可以为给定的数据库方言自动生成DDL。

解决此问题的最佳方法是什么,以便单个开发人员可以轻松地对所有三个数据库进行测试,并且我们基于Hudson的CI服务器可以正确构建内容。

进一步来说:

  1. 我认为hibernate3-maven-plugin中hbm2ddl 目标只会生成一个模式文件, 但是显然它连接到实时数据库并尝试创建模式 。有没有办法 让它只 为每个数据库方言 创建模式文件 而无需 连接到数据库? __

  2. 如果 hibernate3-maven-plugin 坚持实际创建数据库模式,是否有办法让它删除数据库并在创建模式之前重新创建它?

  3. 我认为每个开发人员(和Hudson构建机器)在每个数据库服务器上都应该有各自独立的数据库。这是典型的吗?

  4. 开发人员是否将必须运行Maven三次,每个数据库供应商一次?如果是这样,如何在构建计算机上合并结果?

  5. hibernate3-maven-plugin中有一个 hbm2doc 目标。运行这三遍似乎有点矫kill过正……我必须相信对于每个数据库它几乎都是相同的。


阅读 219

收藏
2020-06-20

共1个答案

一尘不染

1)有没有一种方法可以只为每个数据库方言创建模式文件而无需连接到数据库?

设置exportfalse。像这样:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>hibernate3-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration>
    <components>
      <component>
        <name>hbm2ddl</name>
        <implementation>annotationconfiguration</implementation>
      </component>
    </components>
    <componentProperties>
      <export>false</export><!-- do not export to the database -->
      <drop>true</drop>
      <configurationfile>src/main/resources/hibernate.cfg.xml</configurationfile>
      <outputfilename>my_schema.ddl</outputfilename>
    </componentProperties>
  </configuration>
</plugin>

2)如果hibernate3-maven-plug坚持实际创建数据库模式,是否有办法让它删除数据库并在创建模式之前重新创建它?

往上看。但以防万一,为此设置updatetrue

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>hibernate3-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration>
    <components>
      <component>
        <name>hbm2ddl</name>
        <implementation>annotationconfiguration</implementation>
      </component>
    </components>
    <componentProperties>
      <export>true</export>
      <update>true</update><!-- update the schema -->
      <drop>true</drop>
      <configurationfile>src/main/resources/hibernate.cfg.xml</configurationfile>
      <outputfilename>my_schema.ddl</outputfilename>
    </componentProperties>
  </configuration>
  <dependencies>
    <dependency>
      <groupId>org.apache.derby</groupId>
      <artifactId>derbyclient</artifactId>
      <version>10.5.3.0_1</version>
    </dependency>
  </dependencies>
</plugin>

3)我认为每个开发人员(和hudson构建机器)在每个数据库服务器上都应具有自己的独立数据库。这是典型的吗?

是的,我认为这是最佳做法(请参阅每个开发人员使用一个数据库实例)。

4)开发人员是否必须对每个数据库供应商运行三次Maven …一次?如果是这样,如何在构建计算机上合并结果?

是的,很有可能,我将为每个数据库使用配置文件。在构建机器上,我将构建一个矩阵项目

5)在hibernate3-maven-
plugin中有一个hbm2doc目标。运行这三次似乎有点矫kill过正…我必须相信每个数据库几乎都是相同的。

我不习惯使用此工具,但我想输出可能会有一些变化(例如,使用主键生成)。我将为每个数据库生成模式文档,但是仅在发布时生成(当然不需要在每个构建版本中都运行它)。

2020-06-20