Как настроить вставку в созданный файл Grails со следующим порядковым номером? - PullRequest
1 голос
/ 13 мая 2010

Я использую очередь JMS для чтения и вставки данных в таблицу postgres, созданную grails. Проблема заключается в получении следующего значения последовательности. Я думал, что нашел решение с помощью следующего утверждения (поставив «DEFAULT», куда должен идти идентификатор), но оно больше не работает. Должно быть, я что-то изменил, потому что мне нужно было воссоздать таблицу. Какой лучший способ обойти эту проблему?

ps = c.prepareStatement ("INSERT INTO xml_test (id, версия, xml_text) VALUES (DEFAULT, 0,?) ");

ОБНОВЛЕНИЕ:

В ответ на предложенное решение я сделал следующее:

Добавлено в домен:

class XmlTest {
    String xmlText
    static constraints = {
        id generator:'sequence', params:[name:'xmltest_sequence']
    }
}

И изменил оператор вставки следующим образом:

ps = c.prepareStatement("INSERT INTO xml_test (id, version, xml_text) 
VALUES (nextval('xmltest_sequence'), 0, ?)");

Однако, когда я запускаю инструкцию, я получаю следующую ошибку:

[java] 1 org.postgresql.util.PSQLException: ОШИБКА: отношение "xmltest_sequence" не существует

Есть мысли?

Ответы [ 2 ]

1 голос
/ 18 мая 2010

Проблема решена.

Оказывается, что когда grails создает таблицу, он не назначает ей определенный генератор последовательности.

Вместо этого Grails использует один генератор последовательности для всех таблиц. Это называется "hibernate_sequence".

Итак, чтобы обойти проблему, я включил «nextval» для этого в свой оператор SQL:

ps = c.prepareStatement ("INSERT INTO xml_test (id, version, text_field) VALUES (nextval ('hibernate_sequence'), 0,?)");

1 голос
/ 14 мая 2010

Вы можете получить значение любой последовательности в PostgreSQL, используя функцию nextval, в вашем случае:

INSERT INTO xml_test (id, version, xml_text) VALUES (nextval('sequence_name_for_this_table'), 0, ?);

И в вашем доменном классе Grails вы можете выбрать имя последовательности:

static mapping = {
    id generator:sequence, params:[name:'sequence_name_for_this_table']
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...