Действительно ли возможно составить таблицу, которая не имеет никакого 'идентификатора'? Например, это - мой домен:
class SnbrActVector {
int nid
String term
double weight
static mapping = {
version false
id generator: 'identity'
}
static constraints = {
}
}
Когда я выполняю этот SQL-оператор, он перестал работать:
insert into snbr_act_vector values (5, 'term', 0.5)
Я проверил таблицу, и 'идентификатор' уже установлен на автоинкремент. Я думаю, что другая опция состоит в том, чтобы удалить сам 'идентификатор'. Или есть ли другое обходное решение для этого? Предположите, что это не опция изменить givent SQL-оператор.
Попробуйте использовать: «id (generator: 'assign')» вместо «id generator: 'identity'» и посмотрите, удаляет ли это свойство автоинкремента из базы данных «id» столбец.
Вероятно, вам нужно указать, что nid - это столбец вашего идентификатора.
static mapping = {
version false
id generator: 'identity', column: 'nid'
}
Горму для работы требуется поле id. Вы можете подделать присвоенный идентификатор, используя временную переменную, как показано ниже. Геттеры и сеттеры сопоставляют поле nid с полем id.
При сохранении объекта домена с помощью этого метода вы должны сделать:
snbrActVectgor.save(insert:true)
потому что grails считает, что ненулевой идентификатор является постоянным экземпляром.
class SnbrActVector {
Integer id
// nid is the actual primary key
static transients = ['nid']
void setNid(Integer nid) {
id = nid
}
Integer getNid() {
return nid
}
static mapping = {
version false
id generator:'assigned', column:'nid', type:'integer'
}
}