2011-12-30 121 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' 
}