2010-01-04 4 views
1

J'ai un problème avec Grails 1.1.2 + MySQL.Comment forcer Grails à utiliser le type de colonne approprié dans le champ MySQL for Map

Ma classe de domaine contient quelque chose champ

Map<String, Map<Integer, Integer>> priceMap 

Quand je lance l'application, Grails crée la table 'quelque chose' et sous-table 'something_price_map'. 'Something_price_map' contient

BIGINT(20) price_map 
VARCHAR(255) price_map_idx 
TINYBLOB price_map_elt 

Le problème est que, lorsque je remplis dans la colonne priceMap même avec de petites carte de données similaires à « priceMap: [en: [100: 4, 500: 20, 600: 24]] ', la taille des données dépasse la limite de 255bytes.

Existe-t-il un moyen de spécifier la contrainte maxSize pour la carte interne (Map), de sorte que Grails utilise MEDIUMBLOB ou BLOBK au lieu de TINYBLOB?

Btw ... En utilisant DB en mémoire, tout fonctionne correctement.

Répondre

2

Comme vous le savez peut-être, il existe un mapping constraint pour une classe de domaine. Toutefois, votre problème peut être trop complexe pour cette fonctionnalité.

Dans ce cas, vous pouvez spécifier un explicit Hibernate mapping (via le fichier hbm) pour une classe de domaine. Cela permet la flexibilité complète d'Hibernate.

+0

Oui, c'est le problème - la complexité. Pour une carte simple, je pourrais utiliser la contrainte maxSize, mais je dois spécifier la taille maxSize pour la carte interne. Merci pour la recommandation du fichier hbm. Si je ne trouve pas de meilleure solution, je vais essayer celle-ci. –

Questions connexes