【问题标题】:GORM: how to set datatype of a value in a MapGORM:如何在 Map 中设置值的数据类型
【发布时间】:2011-04-14 03:51:47
【问题描述】:

在我的域对象中,我有一张地图:

Map<String, String> stuff

GORM 自动创建一个表,其中键和值是 varchar(255)

我需要将值改为 LongText。我该怎么做?

另外,是否有不涉及使用休眠配置的解决方法?

【问题讨论】:

    标签: grails map grails-orm


    【解决方案1】:

    我认为您可以在域类的映射闭包中声明此设置。

    String 字段的约束,使其 MySQL 列类型为 TEXT:

    static mapping = {
       myTextField type: 'text'
    }
    

    也许这可以帮助你:Grails 指南(5.5.2.1 Table and Column Names)

    【讨论】:

    • 如果 'stuff' 是标量类型,这将起作用,但它不适用于 Map
    • 它确实适用于Map&lt;String, String&gt;。键将始终为 varchar(255),但值在 MySQL 中为 longtext,在 H2 和 HSQLDB 中为 longvarchar。
    • 在 Grails 1.3.7、2.0.0 和 2.1.1 中测试。从架构导出:create table foo_baz (baz bigint, baz_idx varchar(255), baz_elt longvarchar not null);
    【解决方案2】:

    恐怕只能通过Hibernate XML configspecifying a key mapping 获得stuff

    【讨论】:

    • 查看 Carlos Daniel Gadea Om 的回答。它实际上适用于Map&lt;String, String&gt;
    【解决方案3】:

    如果您想更好地控制数据库的生成/更新方式,那么最好使用数据库迁移,然后让 Hibernate 管理它。我们使用非常易于使用且灵活的 Liquibase,并且已经有一个 Grails plug in 用于它。另外,如果我没记错的话,1.4 版的 Grails 核心中将集成数据库迁移,因此您无需安装任何插件即可使用模式迁移。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      • 2020-01-14
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 2020-11-10
      • 2021-02-27
      相关资源
      最近更新 更多