3

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

为了保持可移植性,我们使用JPA 注释Hibernate作为实现。我们还为每个用于开发的数据库提供了一个测试床实例。

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

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

进一步来说:

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

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

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

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

  5. hibernate3-maven-plugin 中有一个hbm2doc目标。运行 3 次似乎有点矫枉过正......我必须相信每个数据库几乎相同。

4

1 回答 1

3

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 目标。运行 3 次似乎有点矫枉过正......我必须相信每个数据库几乎相同。

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

于 2010-05-14T07:22:53.670 回答