Grails ограничивают размер столбца базы данных - PullRequest
0 голосов
/ 27 января 2010

В моем приложении Grails есть класс домена со свойством

SearchPrivacy searchPrivacy = SearchPrivacy.PUBLIC

где SearchPrivacy - это перечисление

enum SearchPrivacy {
    PRIVATE('pr'), PUBLIC('pu');

    final String id

    SearchPrivacy(String id) {
        this.id = id
    }

    static getEnumFromId(String id) {
        values().find {it.id == id}
    }
}

согласно документации Grails, в столбце сопоставленной базы данных будет храниться pr или pu - значение свойства id Однако, кажется, нет способа уменьшить максимальную длину столбца БД. Я попытался добавить оба из следующих

static constrtaints = {
    searchPrivacy(size: 2..2, maxSize: 2)
}

Но в сгенерированной схеме столбец по-прежнему varchar(255)

Спасибо, Дон

Ответы [ 3 ]

1 голос
/ 28 января 2010

Я не уверен, как это переводится в grails, но в Java это было бы сделано с аннотацией @Column(length=2) в свойстве.

0 голосов
/ 28 января 2010

Может быть, это ошибка. Вы думали о регистрации сообщения об ошибке?

0 голосов
/ 28 января 2010

Ваши ограничения ограничивают только то, что вы можете сохранить.

Если вы хотите изменить фактический тип SQL, который сохраняется, вам нужно объявить в своем доменном классе статическое свойство с именем 'mapping' - так же, как вы уже делаете для своих ограничений. Это будет выглядеть примерно так:

static mapping = {
  searchPrivacy type: SearchPrivacy, {
    sqlType: "char(2)"
  }
}

Вы всегда должны быть начеку, когда видите, что используете атрибут sqlType, потому что вы можете потерять независимость от базы данных, которую вы получаете от hibernate. (Помните, что не все базы данных поддерживают одинаковые типы.)

Вы также можете использовать свойство 'mapping' для обработки таких вещей, как имена пользовательских столбцов, составные ключи и стратегии генерации идентификаторов.

Надеюсь, это поможет!

...