2011-12-30 10 views
9

Sto cercando di mappare una (piccola parte di un) database MySom di Joomla usando GORM con Grails 2.0.database esistente mysql mappa con gorm

Sto leggendo un libro sull'argomento (Grails) e sto consultando il web per l'articolo tecnico, ma ho ancora bisogno di un buon riferimento per mappare i tipi Groovy/Java ai campi MySQL.

Sto iniziando con una semplice tabella jos_bannerclient.

class BannerClient { 
    String name 
    String contact 
    String email 
    String notes 
    String editor = '' 

    static constraints = { 
     name(blank:false) 
     contact(nullable:true) 
     email(nullable:true) 
     notes(nullable:true) 
     editor(nullable:true) 
    } 

    static mapping = { 
     datasource 'joomla' 
     table 'jos_bannerclient' 
     id column:'cid', type:'int' 
     notes column:'extrainfo', type:'text' 
     version false 
    } 
} 

A questo punto il record viene generato nel database, ma se risparmio il dominio con failOnError:true ottengo questo errore: java.lang.IllegalArgumentException.

Ho problemi con la mappatura del campo checked_out TINYINT. L'unica cosa per GORM per convalidare quel campo è dichiararlo come Boolean, perché non funziona con Byte?

Ho anche qualche dubbio su come mappare un campo MySQL TIME come checked_out_time.

Ho letto anche parte della documentazione di Hibernate, ma ancora non ho acquisito le conoscenze necessarie per svolgere questo compito!

Chiunque può aiutare per favore?

+1

ho iniziato una nuova conversazione sul forum del graal comunità su questo argomento e più joomla <-> graal integrazione, a http://goo.gl/ARiug – gsscoder

+2

Si potrebbe trovare questo plugin utile http://www.grails.org/plugin/db-reverse-engineer –

+0

Puoi fornirci ulteriori informazioni sulla tabella originale? Ad esempio, menzioni "checked_out" e "checked_out_time". – mathifonseca

risposta

2

Si sta indicando "tipo" ma dovrebbe indicare "sqlType", motivo per cui ritengo che si stiano riscontrando problemi con TINYINT e che si debba utilizzare un valore booleano anziché Byte. Id è un int (beh in realtà bigint) per impostazione predefinita, ma non si lamenterà di te a meno che non si utilizzi dbCreate = "validate" e gli altri valori siano stringhe in modo tale da non fornire necessariamente un problema di compatibilità per gli appunti.

static mapping = { 
    datasource 'joomla' 
    table 'jos_bannerclient' 
    id column:'cid', sqlType:'int' 
    notes column:'extrainfo', sqlType:'text' 
    version false 
} 

quanto riguarda la questione tempo, sono stato in grado di specificare il tipo TIMESTAMP senza un problema, quindi posso immaginare TEMPO funzionerà bene pure. Tutti i tipi SQL dovrebbero essere supportati. Per esempio:

static mapping = { 
    dateCreated sqlType: 'TIMESTAMP', defaultValue: 'CURRENT_TIMESTAMP' 
}