Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate Grails2.4.3的自动生成键_Hibernate_Postgresql_Grails - Fatal编程技术网

Hibernate Grails2.4.3的自动生成键

Hibernate Grails2.4.3的自动生成键,hibernate,postgresql,grails,Hibernate,Postgresql,Grails,问题已经解决了。问题是我使用了jdbc3。使用jdbc4解决了这个问题 我已经从Grails2.3.6升级到Grails2.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(

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

我已经从Grails2.3.6升级到Grails2.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'),
...
我希望不必更改以前运行良好的数据库(使用Grails2.3.6等)

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

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

我也在Hibernate4.3.5.5中尝试过这个方法,它也会出现同样的问题

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

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

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

然后升级到最新版本的JDBC4驱动程序可能会解决这个问题。事实上,我从与@inge的直接接触中了解到了这一点。

您是否尝试使用
bigserial
而不是nextval的默认值?如果您解决了问题(通过升级到最新的驱动程序),请将其添加为答案并接受该答案。顺便说一句:这肯定不仅仅是从jdbc3升级到jdbc4:
getGeneratedKeys()
在postgresql-8.4-702.jdbc4.jar、postgresql-8.4-703.jdbc3.jar、postgresql-9.3-1102.jdbc3.jar和postgresql-9.3-1102.jdbc4.jar中运行良好“postgres中不支持自动重新发送序列生成的id”-这根本不是真的。
getGeneratedKeys()
在Postgres中使用
prepareStatement(“…”,Statement.RETURN\u GENERATED\u KEYS)时效果很好
对不起,你说得对,我应该重新措辞为"postgresql JDBC3驱动程序中没有支持使用
postgresql-8.4-703.JDBC3.jar
也能为我工作。postgresql-JDBC3-9.1.jar和postgresql-9.3-1102.JDBC3.jar以及java-7-openjdk-amd64或java-8-oracle对我来说都不起作用,但在我的旧服务器上,使用postgresql-JDBC3-9.1.jar和java-6-openjdk,它可以工作n是基于Grails和Groovy构建的,我认为调整Hibernate没有任何意义,所以我允许Hibernate自动生成所有查询。