Сегодня я чувствую себя немного медленно. Я пытаюсь сделать что-то, что я считаю очень простым. У меня есть класс домена со свойством под названием «имя». Я хочу, чтобы «имя» имело индекс, и я хочу, чтобы индекс требовал, чтобы «имя» было уникальным. Я установил уникальное ограничение и попытался создать индекс. Я не могу понять из документов Gorm, как добавить уникальный атрибут в индекс. Вот код:
class Project {
String name
static hasMany = [things:Things]
static mapping = {
name index:'name_idx'
}
static constraints = {
name(unique:true)
}
}
Все хорошо с вышеизложенным, за исключением случаев, когда «показать индексы из проекта» в mysql, он показывает мой ключ имени как не уникальный. Я знаю, что проблема в том, что я не указываю уникальный в сопоставлении, но, честно говоря, документы для gorm вызывают у меня головную боль. Я вижу много всего о столбцах, но нигде в Интернете не могу найти ни одного примера, показывающего, что я хочу сделать. Мне не нужны сложные сопоставления или составные ключи, я просто хочу знать синтаксис для добавления уникального атрибута в объявление сопоставления выше. Приветствуются любые советы.
Я также сделал схему экспорта Grails и вижу следующее:
create index name_idx on project (name);
Ничто в том, что для указания этого индекса не требуются уникальные значения
Связанный дополнительный вопрос будет следующим: как только мне удастся сделать этот индекс уникальным, какой тип ошибки следует ожидать, когда я иду, чтобы сохранить экземпляр проекта, а имя не уникально? Выбрасывается ли конкретное исключение? Я понимаю, что даже если я проверю, что данное «имя» уникально, все еще существует вероятность того, что к тому времени, когда я его сохраню, может быть строка с этим именем.
Я совершенно уверен, что синтаксис для выполнения того, что я хочу, прост, но я просто не могу найти простой пример для обучения. Я был на этой странице, но она не объясняет КАК обеспечивается уникальность. Я хотел бы применить его на уровне индекса имен.