2011-12-30 12 views
9

Estoy tratando de mapear una (pequeña parte de una) base de datos Joomla MySQL usando GORM con Grails 2.0.mapear base de datos mysql existente con gorm

Estoy leyendo un libro sobre el argumento (Grails) y buscando en la web artículo de tecnología, pero todavía necesito una buena referencia para mapear tipos Groovy/Java a campos MySQL.

Estoy empezando con una tabla simple 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 
    } 
} 

En este punto se genera el registro en la base de datos pero si salvo el dominio con failOnError:true me sale este error: java.lang.IllegalArgumentException.

Tengo problemas para mapear el campo checked_out TINYINT. Lo único que GORM puede validar en ese campo es declararlo como Boolean, ¿por qué no funciona con Byte?

También tengo algunas dudas sobre cómo mapear un campo MySQL TIME como checked_out_time.

¡También he leído parte de la documentación de Hibernate, pero todavía no estoy obteniendo los conocimientos necesarios para realizar esta tarea!

¿Alguien puede ayudar, por favor?

+1

he comenzado una nueva conversación en foro de la comunidad griales sobre este tema y más Joomla integración <-> griales, en http://goo.gl/ARiug – gsscoder

+2

Usted puede encontrar este complemento útil http://www.grails.org/plugin/db-reverse-engineer –

+0

¿Puede darnos más información sobre la tabla original? Mencionas 'checked_out' y 'checked_out_time' por ejemplo. – mathifonseca

Respuesta

2

Está indicando "tipo" pero debería estar indicando "sqlType", por lo que creo que tiene problemas con TINYINT y tiene que usar un booleano en lugar de un byte. Id es un int (en realidad, bigint) de forma predeterminada, pero no se quejará de eso a menos que esté usando dbCreate = "validate" y los otros valores sean cadenas, por lo que no necesariamente le dará un problema con la compatibilidad para notas.

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

En cuanto a la cuestión de tiempo, he sido capaz de especificar el tipo TIMESTAMP sin ningún problema, por lo que se puede imaginar TIEMPO trabajará muy bien también. Todos los tipos SQL deben ser compatibles. Por ejemplo:

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