2011-12-30 48 views
9

我試圖用GORM和Grails 2.0映射Joomla MySQL數據庫(的一小部分)。用gorm映射現有的mysql數據庫

我正在閱讀關於參數(Grails)的一本書,並使用Google搜索技術文章,但我仍然需要一個很好的參考來將Groovy/Java類型映射到MySQL字段。

我從一張簡單的表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 
    } 
} 

此時在數據庫中生成的記錄,但如果我救域與failOnError:true我得到這個錯誤:java.lang.IllegalArgumentException

我在映射checked_out TINYINT字段時遇到問題。 GORM驗證該字段的唯一方法是將其聲明爲Boolean,爲什麼它不能與Byte一起使用?

我也有一些疑問,如何映射一個像checked_out_time MySQL TIME字段。

我也讀過Hibernate文檔的一些部分,但仍然沒有獲得完成這項任務所需的知識!

任何人都可以幫忙嗎?

+1

我已經開始對Grails的社區論壇上的新對話關於這個主題和更多的Joomla <-> Grails的整合,在http://goo.gl/ARiug – gsscoder 2012-01-07 16:46:12

+2

您可能會發現這個插件有用的HTTP:/ /www.grails.org/plugin/db-reverse-engineer – 2014-01-20 14:26:04

+0

你能給我們提供關於原始表格的更多信息嗎?例如,您提到'checked_out'和'checked_out_time'。 – mathifonseca 2014-09-14 16:14:24

回答

2

您指示「類型」,但應指示「sqlType」,這就是爲什麼我相信您有TINYINT問題並且必須使用布爾值而不是Byte。 Id默認情況下是一個int(實際上是bigint),但它不會對你抱怨,除非你使用dbCreate =「validate」,而其他值是字符串,所以不一定會給你帶來兼容性問題筆記。

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

至於時間問題,我已經能夠沒有問題,指定類型TIMESTAMP,所以我可以想像時間將正常工作爲好。所有的SQL類型都應該被支持。例如:

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