GORM: как установить тип данных значения на карте

#grails #map #grails-orm

#grails #словарь #grails-orm

Вопрос:

в моем доменном объекте у меня есть карта:

 Map<String, String> stuff
  

GORM автоматически создает таблицу, в которой ключ и значение имеют значение varchar(255).

вместо этого мне нужно, чтобы значение было LongText. Как мне это сделать?

Кроме того, существует ли обходной путь для этого, который не предполагает использования конфигурации гибернации?

Ответ №1:

Я думаю, вы можете объявить этот параметр в закрытии сопоставления вашего доменного класса.

Ограничение для поля String, чтобы его типом столбца MySQL был TEXT:

 static mapping = {
   myTextField type: 'text'
}
  

Возможно, это может вам помочь: Руководство по Grails (5.5.2.1 имена таблиц и столбцов)

Комментарии:

1. это сработало бы, если бы ‘stuff’ был скалярным типом, но это не работает для карты

2. Это действительно работает для Map<String, String> . Ключом всегда будет varchar(255), но значением будет longtext в MySQL и longvarchar в H2 и HSQLDB.

3. Протестировано в Grails 1.3.7, 2.0.0 и 2.1.1. Из экспорта схемы: create table foo_baz (baz bigint, baz_idx varchar(255), baz_elt longvarchar not null);

Ответ №2:

Боюсь, только через Hibernate XML config и указание key сопоставления для stuff .

Комментарии:

1. Смотрите ответ от Карлоса Даниэля Гадеа Ом. Это действительно работает для Map<String, String>

Ответ №3:

Если вы хотите иметь больший контроль над тем, как создается / обновляется база данных, то лучше использовать миграцию базы данных, а не позволять Hibernate управлять ею. Мы используем Liquibase, которая очень проста в использовании и гибка, и для нее уже есть плагин Grails. Кроме того, если я не ошибаюсь, миграции баз данных будут интегрированы в Grails core для версии 1.4, так что вы сможете использовать миграции схемы без необходимости устанавливать какой-либо плагин.