2015-01-08 2 views
2

По умолчанию при создании объекта домена в grails он добавляет столбец «id» и устанавливает его для автоматического увеличения в БД.grails/hibernate: как отключить автоинкремент на столбце ID?

Я хочу указать параметр id при создании/сохранении объекта, а не использовать какой-либо генерации (его для небольшого количества статических фрагментов данных, которые я хочу, чтобы ID был привязан к значениям, которые я даю) ,

Есть другие преимущества, которые я хочу, например. чтобы иметь возможность создать объект в памяти с правильным идентификатором, без необходимости его считывать из БД, сделать этот объект отношением типа «содержит» к другому объекту, если это имеет смысл.

Grails имеет documenation для столбца идентификаторов, но не говорит, как отключить автоматическое приращение и позволить ID должны быть переданы в конструктор объекта домена:

http://grails.org/doc/2.1.0/ref/Database%20Mapping/id.html

ответ

5

Посмотрите отображений для столбца , Согласно documentation вы можете использовать assigned так:

static mapping = { 
    id generator: 'assigned' 
} 

Согласно документации спящего assigned ведет себя как например:

позволяет приложению назначать идентификатор объекта перед сохранением() , называются , Это стратегия по умолчанию, если ни один из элементов не указан .

+0

К сожалению, это не работает. Если я попробую это и передаю идентификатор конструктору и сохраню его, я получу: IdentifierGenerationException: идентификаторы для этого класса должны быть назначены вручную перед вызовом save() –

+0

@JohnLittle, так почему бы вам не назначить его вручную перед вызовом save? – t31321

+0

Я надеялся передать идентификатор в конструкторе, например. новый статус (id: 1, имя: «active»). save(). Я вижу, что могу это сделать: s = новый статус (имя: «активный»); s.id = 1, s.save(), что является более болезненным, поскольку у меня есть много статических элементов для установки в бутстрапе. Я посмотрел на переопределение конструктора Status и передачу в _id и его назначение, а также все остальные поля вручную, но это также значительные накладные расходы. –

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