2010-05-04 10 views
6

ho provato seguendo questo reference e questo è ora il codice del mio dominio:Aggiunta chiave dell'indice nei servizi di Domini Grails'

class SnbrActVector { 

    long nid 
    String term 
    double weight 

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

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

Quello che voglio è fare è di aggiungere una chiave di indice per la colonna nid. Ho abbandonato la tabella esistente e ho eseguito nuovamente l'app in modo da ricreare la tabella. Tuttavia, quando controllo l'elenco degli indici, non riesco a vedere uno Nid_Idx, solo PRIMARY. Devo creare manualmente l'indice e nominarlo Nid_idx nel mio database mysql?

risposta

0

Potrebbe essere necessario aggiungere il nome della colonna per farlo sparare, ad es.

+0

testato e ancora non aggiungendo la chiave di indice automaticamente. abbastanza strano. btw, sto usando Grails 1.2.1. – firnnauriel

1

La sintassi è corretta, quindi potrebbe essere un altro problema o un bug di Grails. Il mio consiglio:

  1. creare una nuova applicazione graal (grails create-app) con SnbrActVector come l'unico dominio (grails create-domain...). Copia il tuo codice all'interno.
  2. Verificare che il file di DataSource.groovy ha dbCreate = "create-drop"
  3. Verificare gli indici della tabella diSnbrActVector.

Se si vede un indice creato per nid colonna, allora vuol dire che non v'è problema nella vostra applicazione (si potrebbe non aver usato "creare-drop" o altro)

Se l'indice non è created => Questo è un bug di Grails e dovresti aprire un problema JIRA here

+1

grazie per questo suggerimento. sembra che ci sia un bug in Grails 1.2.1 quando si usa dbCreate = "update". non sta creando correttamente le chiavi dell'indice. funziona solo quando si utilizza "create-drop", che non è raccomandato in prod env. si noti che dopo che la chiave dell'indice è stata creata da 'create-drop' e la si cambia in 'update', la chiave dell'indice sarà scomparsa di nuovo. – firnnauriel

+0

Non è un bug. Non penso che dbCreate = "update" debba aggiungere/rimuovere indici di database di colonne esistenti (potrebbe essere troppo pericoloso nel mdoe di produzione). Puoi sollevare un problema su JIRA o richiederlo nel forum di Grails (per favore pubblica il link qui). Ad ogni modo, hai la tua risposta. In modalità sviluppo, non è necessario aggiungere manualmente l'indice (utilizzando dbCreate = "create") ma in modalità di produzione, se il database esiste già, è necessario farlo manualmente – fabien7474

4

Sì, funziona solo quando si utilizza dbCreate = "create".

Diciamo che ho un database vuoto e il mio dbCreate impostato su "update". In questo caso l'indice non viene creato.

+2

Definitivamente è un bug in Grails relativo alla sua documentazione. Nella sezione 4.3 indica "aggiornamento: crea tabelle e indici mancanti e aggiorna lo schema corrente senza perdere tabelle o dati". Tuttavia, questo vecchio bug http://jira.grails.org/browse/GRAILS-2152 afferma che si riferisce a un problema con l'aggiornamento di Hibernate e non verrà risolto. –

Problemi correlati