如何忽略创建表,如果存在于带有 eclipselink 的 Postgresql 数据库中



我在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 设置为创建表并且表已经存在于数据库中时,会发生错误并且进程不会继续执行此处所述的下一条语句。

有人看到解决方案吗?

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

在开发环境中,您希望使用干净的数据库,因此

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

与测试环境相同,但在这种情况下,我将使用 DBUnit 用测试数据填充数据库。

在生产中,您不想弄乱数据库结构,因此

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

是正确的选择。

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

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

如果表已经存在,"创建表"选项不会失败。 它将记录错误,但继续。如果不想看到错误,可以关闭日志记录。

你得到什么错误?

相关内容

  • 没有找到相关文章

最新更新