You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Grails类型映射咨询:Boolean映射为Tinyint而非BIT,求完整映射列表

Grails SQL类型映射完整指南:解决Boolean映射差异问题

我之前在对接旧数据库时也遇到过一模一样的困惑——明明Hibernate文档里说Boolean映射成BIT,可Grails默认给我生成了Tinyint。其实这是因为Grails的GORM虽然基于Hibernate,但为了适配不同数据库的默认行为,做了针对性调整,Tinyint就是MySQL这类数据库下Boolean类型的默认映射值。

下面我整理了Grails域类常用类型到SQL类型的默认映射列表(覆盖主流数据库如MySQL、PostgreSQL、SQL Server),以及确认和自定义映射的方法:

常见类型默认映射列表

  • Boolean/boolean:
    • MySQL/MariaDB:TINYINT(1)
    • PostgreSQL:BOOLEAN
    • SQL Server:BIT
  • String:
    • 默认:VARCHAR(255);若指定maxSize: 1000,MySQL会映射为TEXT,其他数据库则为VARCHAR(1000)
  • Integer/int:INT
  • Long/long:BIGINT
  • Double/double:DOUBLE
  • Float/float:FLOAT
  • BigDecimal:默认DECIMAL(19,2),可通过scale和precision约束调整精度
  • Date:
    • MySQL:DATETIME
    • PostgreSQL:TIMESTAMP
    • SQL Server:DATETIME
  • LocalDate:DATE
  • LocalDateTime:TIMESTAMP
  • byte[]:BLOB(二进制大对象)
  • Enum:默认映射为VARCHAR(255)存储枚举名称;可通过sqlType: 'INT'改为存储枚举索引值

确认当前项目的实际映射

如果想精准确认你的项目中每个属性的SQL映射,可以开启Hibernate的SQL日志:
在application.yml中添加配置:

logging:
  level:
    org.hibernate.SQL: DEBUG
    org.hibernate.type.descriptor.sql: TRACE

启动项目后,控制台会打印出完整的建表SQL语句,你能清晰看到每个域类属性对应的SQL类型。

自定义类型映射

正如你所知,若要强制修改某个属性的映射类型,直接在约束中指定sqlType即可:

class YourDomainClass {
    Boolean isActive
    static constraints = {
        isActive sqlType: 'BIT'
    }
}

需要注意的是,不同Grails版本(比如3.x vs 4.x vs 5.x)因为底层依赖的Hibernate版本不同,映射可能有细微差异,建议结合你当前使用的Grails版本的官方GORM文档来核对细节。

内容的提问来源于stack exchange,提问作者Anwar Benhamada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:20:31