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

时间:2012-04-26 09:37:30

标签: postgresql jpa persistence eclipselink postgresql-8.4

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

的persistence.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并且表已经存在于数据库中时,会发生错误,并且进程不会继续执行下面的语句here

有人看到了解决方案吗?

2 个答案:

答案 0 :(得分:2)

我没有看到任何property可以防止你的情况下出现throwin错误。所以我建议如下。您应该有3个不同环境的3个persistence.xml文件:开发,测试和生产。

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

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

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

在制作中你不想搞乱数据库结构,所以

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

是正确的选择。

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

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

答案 1 :(得分:0)

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

你得到什么错误?