自动生成的密钥2.4.3

时间:2014-09-08 09:42:21

标签: hibernate postgresql grails

问题已经解决了。问题是我使用了jdbc3。使用jdbc4解决了这个问题!

我已从grails 2.3.6升级到grails 2.4.3。 这意味着从hibernate 3.6.10.3变为hibernate 3.6.10.17。 我使用带有序列的postgresql数据库为所有对象生成一个id:

CREATE SEQUENCE hibernate_sequence;

CREATE TABLE betygstyp (
    id bigint PRIMARY KEY DEFAULT nextval('hibernate_sequence'),
...

我希望不必更改之前运行良好的数据库(使用grails 2.3.6等)。

当我现在尝试保存新对象时,我收到以下错误消息:

  

org.postgresql.util.PSQLException:不支持返回自动生成的密钥。   在
  org.postgresql.jdbc3.AbstractJdbc3Connection.prepareStatement(AbstractJdbc3Connection.java:448)

我也用hibernate 4.3.5.5尝试过这个问题。

我怀疑需要一些新的配置,但是什么? 我使用Grails中使用的默认配置,并且不对hibernate使用任何xml配置。

1 个答案:

答案 0 :(得分:0)

Hibernate可能已经改变了绕过postgresql缺点的策略。 postgresql JDBC3驱动程序中不支持自动重新发送序列生成的id。 如果策略更改为使用标准SQL

insert into betygstyp (...) values (...) returning id

然后升级到最新版本的JDBC4驱动程序可以解决问题。事实上,我知道直接接触@inge,确实如此。