Grails not-null属性在验证期间引用null或transient值

时间:2013-02-01 15:29:21

标签: hibernate validation grails

我有一个带有一堆非可空字符串的域类。对于其中一个域属性,我调用自定义验证器进行数据库检查。当我的原始域对象中有一个字段为空时,在自定义验证期间,域对象会尝试刷新。这导致' not-null属性引用空值或瞬态值'错误。我将我的休眠刷新模式设置为手动,所以我不知道为什么它会尝试刷新。

    String id
String name
String type
String description


static constraints =
{
    id unique: true, nullable:false
    type unique:false, nullable: false
    name(unique:['type'] nullable: false, blank:false,
        validator:{val, obj ->
            if(val != null)
            {
                    def result = OtherDomain.findByType(val)
                    if(result == null)
                    {
                        return 'foreignkey'
                    }

            }

        })


    description unique:false,nullable: false

}

static mapping =
{
    table 'track'
    id column:'id', type: 'string', generator: 'assigned'
    version false
}

没有其他域名修改。这是此次交易中唯一编辑的域名。

1 个答案:

答案 0 :(得分:2)

Grails通常会在任何查询之前刷新hibernate会话,因此OtherDomain.findByType(val)导致刷新。您可以通过在单独的hibernate会话中执行查询来解决此问题:

OtherDomain.withNewSession { session ->
    def result = OtherDomain.findByType(val)
    if (result == null) {
        return 'foreignkey'
    }
}