【问题标题】:Grails not-null property references a null or transient value during validateGrails 非空属性在验证期间引用空值或瞬态值
【发布时间】:2013-02-01 15:29:20
【问题描述】:

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

    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
}

没有其他域修改正在进行。这是此交易期间唯一编辑的域。

【问题讨论】:

    标签: hibernate validation grails


    【解决方案1】:

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

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

    【讨论】:

    • 这解决了问题并返回验证。谢谢!
    猜你喜欢
    • 2011-12-23
    • 2017-04-25
    • 1970-01-01
    • 2010-10-08
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多