【问题标题】:Setting default maxLength for Grails GORM Strings?为 Grails GORM 字符串设置默认 maxLength?
【发布时间】:2013-10-17 16:43:16
【问题描述】:

我知道您可以通过 grails.gorm.default.constraints 配置属性按名称设置默认约束:

grails.gorm.default.constraints = {
    '*'(nullable:true)
}

但是有没有办法按类型设置它?我想将我的所有字符串默认为 maxSize:2000 (主要是强制默认的数据库映射不是 varchar(255))

【问题讨论】:

    标签: grails grails-orm


    【解决方案1】:

    我认为在Config.groovy 中没有任何方法可以轻松做到这一点。不过,您可以为休眠创建自定义方言而不会带来太多麻烦。例如(使用 Postgres 方言):

     package mypackage;
    
     import org.hibernate.dialect.PostgreSQLDialect;
     import java.sql.Types;
    
     public MyPostgresDialect extends PostgresSQLDialect {
         public MyPostgresDialect() {
             super();
             registerColumnType(Types.VARCHAR, "text");
         }
     }
    

    然后更新DataSource.groovy 以使用新的方言:

    datasource {
        ...
        dialect = mypackage.MyPostgresDialect
    }
    

    【讨论】:

    • 这是一个非常好的主意 - 我没有想到整个方法。我刚刚认为将无限数据类型(例如字符串)自动绑定到非常短的有限类型(varchar(255))是一个麻烦的接收器。见鬼 - 鉴于现在几乎所有现代数据库在空间上都更加智能(只使用需要的东西) - 我很惊讶 varchars 甚至有限制 - 为什么不做一个非常高值的上限(例如 8k、32k 等),并在需要时使用约束来人为地限制它……但这只是我的想法……
    【解决方案2】:

    只是为了提供我从同事那里收到的额外答案 - 这不适用于这种情况,但可能对其他人有所帮助...

    如果您可以在属性中遵循命名约定,那么您可以这样做:

    '*_s': (maxSize:2000)
    

    我个人不喜欢交叉绑定道具名称和数据类型 - 但希望将其作为一种方法包含在内(尽管我更喜欢 ataylor 的方言回答......)

    【讨论】:

      猜你喜欢
      • 2018-12-07
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 2011-04-09
      • 2011-07-21
      • 1970-01-01
      • 2017-02-16
      相关资源
      最近更新 更多