У меня есть приложение 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']