我有一个GORM查询,我需要避免使用可能是遗留系统问题的空字符串的字段。
目前,我的查询是:
def things = Thing.withCriteria{
resultTransformer CriteriaSpecification.ALIAS_TO_ENTITY_MAP
createAlias 'factor', 'f'
eq 'active', true
isNotNull 'title' // this field may be an empty string
isNotNull 'content' // this field also may be an empty string
// <-- and here I'd like to include sth like isEmpty 'title'
not {
inList 'f.id', factors
}
projections{
property 'id' , 'id'
property 'f.name' , 'name'
property 'title' , 'title'
property 'content' , 'content'
property 'f.id' , 'factorId'
}
}
我在文档中找不到任何解决方案,但我觉得这个解决方案应该是纯SQL。可能吗?有什么建议吗?
答案 0 :(得分:1)
您是否尝试将此声明添加到条件中?
ne title, ""
Grails标准依赖于hibernate Restrictions,因此支持的所有内容也可以用于grails标准。
否则您也可以使用sql restrictions (see Using SQL Restrictions section):
sqlRestriction "char_length(title) > 0"
请记住,title
这里是指数据库中的真实列名。如果您想拥有更可靠的代码,可以在模型中包含字段的静态映射(列名称):
static mapping = {
title column: 'title'
}
通过这种方式,您应该避免db特定命名行为(如果有)的错误。