2014-09-08 3 views
1

Проблема решена. Проблема заключалась в том, что я использовал jdbc3. Использование jdbc4 решает проблему!автогенерированные ключи для гравия 2.4.3

Я модернизировал от grails 2.3.6 до grails 2.4.3. Это означало переход из спящего режима 3.6.10.3 в спящий режим 3.6.10.17. Я использую базу данных PostgreSQL с последовательностью для генерации идентификатора для всех объектов:

CREATE SEQUENCE hibernate_sequence; 

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

Я надеюсь, что не придется менять базу данных, которая работала хорошо, прежде чем (с Грааль 2.3.6 и т.д.)

Когда я теперь пытаюсь сохранить новый объект, я получаю сообщение об ошибке:

org.postgresql.util.PSQLException: Возвращение автогенерируемых ключей не поддерживаются. на
org.postgresql.jdbc3.AbstractJdbc3Connection.prepareStatement (AbstractJdbc3Connection.java:448)

Я также попытался это с Hibernate 4.3.5.5, которая дает ту же самую проблему.

Я подозреваю, что вам нужна новая конфигурация, но что? Я использую конфигурацию по умолчанию, используемую в Grails, и не использую конфигурацию xml для спящего режима.

+0

Вы пытались использовать 'bigserial' вместо стандартного с nextval? –

+0

Если вы решили свою проблему (обновив до современного драйвера), добавьте это как ответ и примите этот ответ. –

+0

Btw: возможно, это было не просто обновление с 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 –

ответ

0

Hibernate, возможно, изменил стратегию обхода недостатков postgresql. В драйвере postgresql JDBC3 нет поддержки для автоматической отправки идентификатора, сгенерированного последовательностью. Если стратегия изменяются на с использованием стандартного SQL

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

затем обновление до последней версии драйвера JDBC4 может решить эту проблему. На самом деле, я знаю, что он напрямую связан с @inge.

+0

"* В postgres нет поддержки для автоматической повторной отправки идентификатора, сгенерированного последовательностью *" - Это просто неверно. 'getGeneratedKeys()' отлично работает в Postgres при использовании 'prepareStatement (" ... ", Statement.RETURN_GENERATED_KEYS)' –

+0

Извините, вы правы, я должен перефразировать «Поддержка в postgresql JDBC3 драйверу ... – serafim

+0

Работает для меня, используя 'postgresql-8.4-703.jdbc3.jar' так же хорошо. –

Смежные вопросы