2010-05-04 11 views
6

he intentado seguir este reference y esto ahora es el código de mi dominio:Adición de clave de índice en el dominio Grails'

class SnbrActVector { 

    long nid 
    String term 
    double weight 

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

    static constraints = { 
     term(blank:false) 
    } 
} 

Lo que quiero es que hacer es añadir una clave de índice para la columna de nid. Dejé caer la tabla existente y ejecuté la aplicación de nuevo para que la tabla se vuelva a crear. Sin embargo, cuando compruebo la lista de índices, no puedo ver un Nid_Idx, solo PRIMARY. ¿Tengo que crear manualmente el índice y ponerle el nombre Nid_idx en mi base de datos mysql?

Respuesta

0

Es posible que deba agregar el nombre de la columna para que se active, p.

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

lo probó y aún no agrega la clave de índice automáticamente. bastante raro. Por cierto, estoy usando Grails 1.2.1. – firnnauriel

1

Su sintaxis es la correcta, por lo que podría tratarse de otro problema o de un error de Grails. Mi consejo:

  1. crear una nueva aplicación griales (grails create-app) con SnbrActVector como el único dominio (grails create-domain...). Copie su código adentro.
  2. Compruebe que el archivo DataSource.groovy tiene dbCreate = "create-drop"
  3. Verificar los índices de la tablaSnbrActVector.

Si ves un índice creado para nid columna, entonces significa que hay un problema en su aplicación (es posible que no haya utilizado "crear soltar" o algo más)

si el índice no es created => Este es un error de Grails y debería abrir un problema JIRA here

+1

gracias por esta sugerencia. parece que hay un error en Grails 1.2.1 cuando se usa dbCreate = "update". no está creando correctamente las claves de índice. solo funciona cuando se usa "create-drop", que no se recomienda en prod env. tenga en cuenta que después de que la clave de índice haya sido creada por 'create-drop' y la cambie de nuevo a 'update', la clave de índice desaparecerá nuevamente. – firnnauriel

+0

No es un error. No creo que dbCreate = "update" deba agregar/eliminar índices de bases de datos de columnas existentes (podría ser demasiado peligroso en producción mdoe). Puedes plantear un problema en JIRA o solicitarlo en el foro de Grails (por favor, publica el enlace aquí). De todos modos, usted tiene su respuesta. En el modo de desarrollo, no es necesario agregar manualmente el índice (utilizando dbCreate = "crear"), pero en el modo de producción, si la base de datos ya existe, debe hacerlo manualmente – fabien7474

4

Sí, está funcionando solo cuando se usa dbCreate = "create".

Digamos que tengo una base de datos vacía y mi dbCreate establecido en "update". En este caso, el índice no se crea.

+2

Definitivamente es un error en grises en relación con su documentación. En la sección 4.3, indica "actualización: crea tablas e índices faltantes y actualiza el esquema actual sin descartar ninguna tabla o datos". No obstante, este viejo error http://jira.grails.org/browse/GRAILS-2152 establece que se relaciona con un problema con la actualización de Hibernate y no será corregido. –

Cuestiones relacionadas