Hibernate 使用Grails GORM从遗留数据库中的字符字段中剥离尾随空格

Hibernate 使用Grails GORM从遗留数据库中的字符字段中剥离尾随空格,hibernate,grails,gorm,hibernate-mapping,Hibernate,Grails,Gorm,Hibernate Mapping,在传统数据库中映射char字段时,有哪些可能的解决方案可以去除尾随空格 我看到以下选项: 在使用点调用.trim()(控制器、视图等) 重写属性访问器以返回.trim() 使用Hibernate用户类型修剪空白 我倾向于覆盖属性访问器,以便域属性在整个应用程序中保持一致。我遇到了类似的问题,无法更改旧数据。为了对我的开发伙伴透明,我最终覆盖了访问器。我建议使用瞬态字段,这样就不必在每次调用时都修剪字符串然而;如果您只需清理表中的数据、创建视图或传输到新表,我会这样做。我使用全局映射的Hibe

在传统数据库中映射
char
字段时,有哪些可能的解决方案可以去除尾随空格

我看到以下选项:

  • 在使用点调用
    .trim()
    (控制器、视图等)
  • 重写属性访问器以返回
    .trim()
  • 使用Hibernate用户类型修剪空白

我倾向于覆盖属性访问器,以便域属性在整个应用程序中保持一致。

我遇到了类似的问题,无法更改旧数据。为了对我的开发伙伴透明,我最终覆盖了访问器。我建议使用瞬态字段,这样就不必在每次调用时都修剪字符串然而;如果您只需清理表中的数据、创建视图或传输到新表,我会这样做。

我使用全局映射的Hibernate用户类型,它工作得很好(基于实现,但更新了,用于中断对
用户类型的更改)
接口):

Groovy.config中的全局映射:

grails.gorm.default.mapping = {
    'user-type'(type: company.TrimmedString, class: String) //map Char(x) columns mapped to string fields as trimmed string
}

你是如何处理验证的?显然,Grails不验证瞬态属性的约束。是的,Grails不喜欢对瞬态字段使用标准验证。您必须手动处理它,并处理将消息添加到FlashScope的问题。也许你可以考虑使用beforeSave拦截器,让它看起来更加透明,并将验证放在那里。视图是一个很好的解决方案。视图被替换为子查询,一些DB引擎可以优化结果查询(避免子查询)。如果视图中有很多连接,也可以构建物化视图。表中的任何索引都会在视图中考虑。
grails.gorm.default.mapping = {
    'user-type'(type: company.TrimmedString, class: String) //map Char(x) columns mapped to string fields as trimmed string
}