我知道你可以按名稱按設定通過grails.gorm.default.constraints配置屬性默認約束:爲Grails GORM字符串設置默認maxLength?
grails.gorm.default.constraints = {
'*'(nullable:true)
}
,但有沒有辦法通過類型設置呢?我想默認我所有的字符串默認爲maxSize:2000(主要是強制默認數據庫映射不是varchar(255))
我知道你可以按名稱按設定通過grails.gorm.default.constraints配置屬性默認約束:爲Grails GORM字符串設置默認maxLength?
grails.gorm.default.constraints = {
'*'(nullable:true)
}
,但有沒有辦法通過類型設置呢?我想默認我所有的字符串默認爲maxSize:2000(主要是強制默認數據庫映射不是varchar(255))
我不認爲有任何方法可以在Config.groovy
中輕鬆完成此操作。你可以創建一個自定義的hibernate的方言,但沒有太多的麻煩。例如(使用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
}
只是提供我從同事收到了額外的答案 - 這是不適用於這種情況,但可能幫助別人......
如果你可以按照你的屬性的命名慣例,那麼你可以做:
'*_s': (maxSize:2000)
我個人不喜歡交叉綁定的道具名稱和數據類型 - 但希望將其作爲一種方法(儘管我更喜歡ataylor的方言答案......)
這真是一個好主意 - 我沒有想到整個方法。我剛剛認爲將一個無限數據類型(例如字符串)自動綁定到一個非常短的受限類型(varchar(255))是一個收件人的麻煩。哎呀 - 考慮到幾乎所有的現代數據庫在空間上都非常聰明(只使用需要的) - 我很驚訝,varchars甚至有限制 - 爲什麼不做一個高價值的上限(例如8k,32k等),並使用約束,如果需要人爲地限制它......但這只是我蜿蜒的想法...... –