0

我在 JOnAS(Java 环境)中使用带有 eclipselink2.3 提供程序的 Postgresql 数据库。我的配置是:

持久性.xml:

...
<property name="eclipselink.ddl-generation" value="create-tables"/>
<property name="eclipselink.ddl-generation.output-mode" value="database"/>
<property name="eclipselink.target-database" value="POSTGRESQL"/>
...

Postgresql 版本是

Version : 8.4.11-0squeeze1

JDBC 驱动程序版本是

postgresql-8.4-703.jdbc3.jar

当数据库为空时,没有问题。

我的问题是当 eclipselink.ddl-generation 设置为 create-tables 并且表已经存在于数据库中时,会发生错误并且进程不会继续执行下一条语句,如此所述。

有没有人看到解决方案?

4

2 回答 2

2

在您的情况下,我没有看到任何可以防止抛出错误的属性。所以我建议以下。您应该有 3 个用于 3 个不同环境的 persistence.xml 文件:开发、测试和生产。

在开发环境中,您想使用干净的数据库,所以

<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>

测试环境也是如此,但在这种情况下,我会使用 DBUnit 来用测试数据填充数据库。

在生产中,您不想弄乱数据库结构,所以

<property name="eclipselink.ddl-generation" value="none"/>

是正确的选择。

如果您使用 ant 或 maven,这样的配置相当容易完成(您可能会在网上找到示例,因为这是非常标准的方法)。

我猜你不会喜欢这个答案;),因为这看起来需要做很多额外的工作,但从长远来看,干净的配置和分离会得到回报。

于 2012-04-26T13:18:34.317 回答
0

如果表已经存在,“create-tables”选项不会失败。它将记录错误,但继续。如果您不想看到错误,可以关闭日志记录。

你得到什么错误?

于 2012-04-26T13:23:21.783 回答