我在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,这样的配置相当容易完成(你可能会在网上找到示例,因为这是非常标准的方法)。
我想你;)不会喜欢这个答案,因为这看起来像是相当多的额外工作,但从长远来看,干净的配置和分离会得到回报。
如果表已经存在,"创建表"选项不会失败。 它将记录错误,但继续。如果不想看到错误,可以关闭日志记录。
你得到什么错误?