【问题标题】:map existing mysql database with gorm用gorm映射现有的mysql数据库
【发布时间】:2011-12-30 09:24:28
【问题描述】:

我正在尝试使用带有 Grails 2.0 的 GORM 映射一个(一小部分)Joomla MySQL 数据库。

我正在阅读一本关于论点 (Grails) 的书并在网上搜索技术文章,但我仍然需要一个很好的参考资料来将 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

我也对如何映射 MySQL TIME 字段(如 checked_out_time)有些疑问。

我还阅读了部分 Hibernate 文档,但仍未获得完成此任务所需的知识!

有人可以帮忙吗?

【问题讨论】:

  • 我已经在 grails 社区论坛上开始了关于这个主题和更多 joomla grails 集成的新对话,goo.gl/ARiug
  • 你可能会发现这个插件很有用grails.org/plugin/db-reverse-engineer
  • 您能给我们提供更多关于原始表的信息吗?例如,您提到了“checked_out”和“checked_out_time”。

标签: mysql grails map joomla grails-orm


【解决方案1】:

您正在指示“类型”,但应该指示“sqlType”,这就是为什么我认为您在使用 TINYINT 时遇到问题并且必须使用布尔值而不是字节。默认情况下,Id 是一个 int(实际上是 bigint),但除非您使用 dbCreate = "validate" 并且其他值是字符串,否则它不会向您抱怨,因此不一定会给您带来兼容性问题笔记。

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

至于 TIME 问题,我已经能够毫无问题地指定类型 TIMESTAMP,所以我可以想象 TIME 也可以正常工作。应支持所有 SQL 类型。例如:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-05
    • 2012-12-04
    • 1970-01-01
    • 2014-01-20
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多