9

I'm trying to map a (small part of a) Joomla MySQL database using GORM with Grails 2.0.

I'm reading a book on the argument (Grails) and googling the web for tech article, but I still need a good reference to map Groovy/Java types to MySQL fields.

I'm starting with a simple table 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
    }
}

At this point the record is generated in the database but if I save the domain with failOnError:true I get this error: java.lang.IllegalArgumentException.

I've problems mapping the checked_out TINYINT field. The only thing for GORM to validate that field is to declare it as Boolean, why it doen't work with Byte?

I've also some doubt on how to map a MySQL TIME field like checked_out_time.

I've also read some part of Hibernate documentation, but still not gaining the needed knowledge to accomplish this task!

Anyone can help please?

Michael Berkowski
  • 267,341
  • 46
  • 444
  • 390
gsscoder
  • 3,088
  • 4
  • 33
  • 49
  • 1
    I've started a new conversation on grails community forum on this topic and more joomla <-> grails integration, at http://goo.gl/ARiug – gsscoder Jan 07 '12 at 16:46
  • 2
    You might find this plugin useful http://www.grails.org/plugin/db-reverse-engineer – Dónal Jan 20 '14 at 14:26
  • Can you give us more information about the original table? You mention the 'checked_out' and 'checked_out_time' for example. – mathifonseca Sep 14 '14 at 16:14

1 Answers1

2

You are indicating "type" but should be indicating "sqlType", which is why I believe you are having issues with TINYINT and having to use a Boolean instead of Byte. Id is an int (well actually bigint) by default, but it won't complain at you about that unless you are using dbCreate = "validate" and the other values are strings so that won't necessarily give you an issue with compatibility for notes.

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

As for the TIME issue, I have been able to specify type TIMESTAMP without a problem, so I can imagine TIME will work fine as well. All SQL types should be supported. For example:

static mapping = {
  dateCreated sqlType: 'TIMESTAMP', defaultValue: 'CURRENT_TIMESTAMP'
}
th3morg
  • 4,321
  • 1
  • 32
  • 45