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

    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 
} 

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

请您参考如下方法:

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

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


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!