7
votes

Ajouter une clé d'index dans le domaine des greils

J'ai essayé de suivre cette référence et ceci est maintenant le code de mon domaine: xxx

Ce que je veux, c'est faire est d'ajouter une clé d'index pour le nid colonne. J'ai laissé tomber la table existante et avons couru l'application afin que la table soit ensuite recréée. Cependant, lorsque je vérifie la liste des indices, je ne peux pas voir un nid_idx , uniquement primaire . Dois-je créer manuellement l'index et le nom informatique Nid_idx dans ma base de données MySQL?


0 commentaires

3 Réponses :


0
votes

Vous devrez peut-être ajouter le nom de la colonne pour l'obtenir à FIRE E.G.

static mapping = {
        version false
        nid column:'nid', index:'Nid_Idx'
    }


1 commentaires

Testé-la et n'ajoute toujours pas la clé d'index automatiquement. assez bizarre. BTW, j'utilise Grails 1.2.1.



1
votes

Votre syntaxe est correcte, il peut donc s'agir d'un autre problème ou d'un bogue de grails. Mon conseil:

  1. Créer une nouvelle application GRAVES ( grails Create-App ) avec snbractvector comme seul domaine ( grails crée-domaine ... ) . Copiez votre code à l'intérieur.
  2. Vérifiez que votre datasource.groovy fichier est dbcreate = "create-goutte"
  3. Vérifiez les indices de la table snbractvector .

    Si vous voyez un index créé pour NID , cela signifie qu'il existe un problème dans votre application (vous n'avez peut-être pas utilisé "Créer-goutte" ou autre chose)

    Si l'index n'est pas créé => Ceci est un bogue GRAVES et vous devez ouvrir un problème de jira ici


2 commentaires

Merci pour cette suggestion. Il semble qu'il y ait un bogue dans Grails 1.2.1 lors de l'utilisation de DBCreate = "Mise à jour". Il ne crée pas correctement les clés d'index. Cela ne fonctionne que lorsque vous utilisez "Créer-goutte", qui n'est pas recommandé dans Prod Env. Notez qu'après la création de la touche d'index par «Créer-goutte» et que vous le modifiez à la section «Mise à jour», la touche Index sera écoutée.


Ce n'est pas un bug. Je ne pense pas que dbcreate = "mise à jour" doit ajouter / supprimer des index de base de données des colonnes existantes (pourrait être trop dangereuse dans la production MDOE). Vous pouvez soulever un problème sur JIRA ou demander à cela dans le forum Grails (veuillez poster le lien ici). Quoi qu'il en soit, vous avez votre réponse. En mode de développement, vous n'avez pas besoin d'ajouter manuellement l'index (à l'aide de dbcreate = "Créer") mais en mode de production, si la base de données existe déjà, vous devez le faire manuellement



5
votes

Oui, ça ne fonctionne que lorsque vous utilisez dbcreate = "Créer" .

Disons que j'ai une base de données vide et mon dbcreate défini sur "mise à jour" . Dans ce cas, l'indice n'est pas créé.


1 commentaires

Il s'agit certainement d'un bogue dans Grails par rapport à sa documentation. Dans la section 4.3, il indique "Mise à jour - crée des tableaux et des index manquants et met à jour le schéma actuel sans laisser tomber des tables ni des données". Néanmoins, ce vieux bug jira.grails.org/browse/grails-2152 stipule que Il concerne un problème de mise à jour hibernate et ne sera pas corrigé.