Возможно ли для домена Grails отсутствие идентификатора? - PullRequest
7 голосов
/ 06 апреля 2010

Можно ли создать таблицу без идентификатора? Например, это мой домен:

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)

Я проверил таблицу, и для 'id' уже установлено автоинкремент. Я думаю, что другой вариант - удалить сам идентификатор. Или есть другой обходной путь для этого? Пожалуйста, примите во внимание, что нельзя изменить данный оператор SQL.

Ответы [ 5 ]

6 голосов
/ 07 апреля 2010

Горм требует поле 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'
    }
}
4 голосов
/ 06 апреля 2010

Возможно, вам нужно указать, что nid - это ваш столбец идентификатора.

static mapping = {
    version false
    id generator: 'identity', column: 'nid'
}
2 голосов
/ 06 марта 2012

Нет способа не иметь «id». что вы можете сделать, это изменить имя поля "id", используя назначенный генератор идентификаторов.

1 голос
/ 09 октября 2015

Да, в Oracle вы можете использовать ROWID для столбца ID.

class Document {
    String id

    static mapping = {
        table "DOCUMENTS"
        version false
        id column: 'ROWID'
    }

}
1 голос
/ 06 апреля 2010

Попробуйте использовать: "id (generator: 'assign')" вместо "id generator: 'identity" "и посмотрите, удаляет ли это свойство автоинкремента из столбца базы данных" id ".

...