Приложение Grails неправильно использует следующее значение из последовательности - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть приложение Grails3, и я хотел переключиться с наивной генерации добавочных идентификаторов, которую я использовал для тестов, на последовательность из области данных (я использую Oracle 12c).Итак, у меня есть код, подобный следующему:

   static mapping = {
        sort 'name'
        version false
        id column: 'CONFIGID', name:'id', generator:'sequence', params:[sequence: 'CONFIG_API_SEQ']
    }

Скаффолдинг работает просто отлично, но значения идентификаторов, которые я получаю для новых записей, совсем не такие, как я ожидал - например, приведенная выше последовательность LAST_NUMBERПрямо сейчас это 161, и все же новые записи 141, 142, 143 и так далее.Из того, что я прочитал, Grails должен использовать nextVal по умолчанию, когда предоставляется внешняя последовательность, поэтому я ожидал что-то эквивалентное запросу select CONFIG_API_SEQ.nextVal as seq from dual;, но, похоже, это не так.Почему это так?

Я также пробовал разные значения генератора или явно указывал defaultValue, но ничто из перечисленного ниже не меняет поведение, последовательность 144, 145 и т. Д. Продолжает работать (вместо 162,163 ...):

  • id column: 'CONFIGID', name:'id', generator:'native', params:[sequence: 'CONFIG_API_SEQ'], defaultValue: "nextval('CONFIG_API_SEQ')"
  • id column: 'CONFIGID', name:'id', generator:'native', params:[sequence: 'CONFIG_API_SEQ']
  • id column: 'CONFIGID', name:'id', generator:'assigned', params:[sequence: 'CONFIG_API_SEQ']
...