Как настроить ограничения / отображение БД для Map в классе домена grails - PullRequest
5 голосов
/ 13 июля 2010

Следующий класс домена grails:

class MyClass {
  Map myMap
}

Теперь для myMap grails автоматически создает новую таблицу для элементов на карте.Однако, если я добавляю элементы, которые являются слишком длинными (например, 1024 символа), я получаю ошибку БД.

Могу ли я как-то сказать grails, чтобы сделать соответствующий столбец в таблице myMap достаточно большим, чтобы допускать большие строки, или сделатьЯ должен сделать это вручную в БД?

Я уже пробовал

static constraints = {
  myMap(maxSize:1024)
}

, который не работает (как и ожидалось, потому что maxSize должен ссылаться на значения карты, а не на саму карту).

Если не с помощью ограничений, может быть, есть способ сделать это через

static mapping { ... }

?

Ответы [ 2 ]

5 голосов
/ 13 июля 2010

Альтернативный подход, который я успешно использовал, состоял в том, чтобы вытолкнуть карту в коллекцию класса домена соавтора.

class DynaProperty {
    String name
    String value

    static belongsTo = MyClass
    static constraints = {
        value(maxSize:4000)  //Or whatever number is appropriate
    }
}

А затем в MyClass:

class MyClass {
    static hasMany = [dynaProperties:DynaProperty]
}

Это почти карта, и она дает вам возможность использовать динамические искатели для поиска отдельной записи.

0 голосов
/ 13 июля 2010

что вы пытаетесь достичь?Всегда ли на карте одинаковое количество вещей?Если есть, вы должны определить эти свойства в вашем классе.

Вы можете увидеть проблему с вашим текущим подходом - нет способа выяснить, что может быть на карте до времени выполнения, так как же Grails может создать для нее столбцы?Я удивлен, что это даже сработало с самого начала ...

...