GORM mapping: сделать индекс уникальным - PullRequest
1 голос
/ 03 апреля 2011

Я чувствую себя немного медленно сегодня.Я пытаюсь сделать то, что мне кажется очень простым.У меня есть класс Домен со свойством под названием «имя».Я хочу, чтобы у 'name' был индекс, и я хочу, чтобы индекс требовал, чтобы 'name' было уникальным.Я установил уникальное ограничение и попытался создать индекс.Из документации Gorm я не могу понять, как добавить уникальный индекс в индекс.Вот некоторый код:

class Project {
    String name

    static hasMany = [things:Things]

    static mapping = {
        name index:'name_idx'
    }
    static constraints = {
        name(unique:true)
    }
}

Все хорошо с вышеперечисленным, за исключением того, что когда "show indexes from project" в mysql показывает, мой ключ имени не уникален.Я знаю, что проблема в том, что я не указываю уникальность в картографии, но, откровенно говоря, документы по Горму причиняют мне боль.Я вижу разные вещи о столбцах, но нигде в Интернете не могу найти ни одного примера, который бы показывал, что я хочу делать.Мне не нужны сложные сопоставления или составные ключи, я просто хочу знать синтаксис для добавления уникального атрибута в объявление сопоставления выше.Любой совет приветствуется.

Я также сделал схему экспорта grails и вижу следующее:

create index name_idx on project (name);

Ничто в этом смысле для указания этого индекса не требует уникальных значений

СвязанныйСледующий вопрос будет, как только мне удастся сделать этот индекс уникальным, какой тип ошибки мне следует ожидать, когда я сохраню экземпляр Project, а имя не является уникальным?Есть ли конкретное исключение?Я понимаю, что даже если я проверю, что данное «имя» уникально, все равно есть вероятность, что к тому времени, когда я его сохраню, может появиться строка с этим именем.

Я вполне уверен, что синтаксисТо, что я хочу, - это просто, но я просто не могу найти простой пример, с помощью которого можно себя научить.Я был на этой странице, но она не объясняет, КАК уникальность обеспечивается.Я хотел бы применить его на уровне индекса имени.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2011

IndexColumn позволяет настраивать дополнительные параметры. Это может быть то, что вы ищете.

static mapping = {
    name indexColumn:[name:'name_idx', unique:true]
}

Grails Документация для indexColumn

0 голосов
/ 20 апреля 2018

Если вы установили только ограничение уникальное , GORM отправляет DDL для создания уникального индекса для базы данных.

static constraints = {
   name nullable: false, unique: true
} 
...