问题已经解决了。问题是我使用了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配置。
答案 0 :(得分:0)
Hibernate可能已经改变了绕过postgresql缺点的策略。 postgresql JDBC3驱动程序中不支持自动重新发送序列生成的id。 如果策略更改为使用标准SQL
insert into betygstyp (...) values (...) returning id
然后升级到最新版本的JDBC4驱动程序可以解决问题。事实上,我知道直接接触@inge,确实如此。