1

我试图在运行服务器时将用户管理数据插入到测试中。Bootstrap 类执行成功,但记录未插入表中。我在这里粘贴我的角色、用户和引导文件

我的角色域

package com.mediacast
class Role {    
    static mapWith="mongo"
    String roleType     


    static constraints = {
        roleType(nullable:false,blank:false)
    }
    static mapping = {          
    }
}

我的测试域

package com.mediacast

class Tests {
    static mapWith="mongo"
    //static hasMany = [roles: Role]    
    String userName 
    String password 
    String mailId            
    String pwdSet
    String role
    Role roles
    static constraints = {
        userName nullable:false,blank:false, unique:true        
        mailId blank:false              
    }
    static mapping={
        version false
    }
}

我的引导类是

import com.mediacast.User
import com.mediacast.Role
import com.mediacast.Tests
class BootStrap {
    def springSecurityService
    def init = { servletContext ->

        if (!Tests.count()) {       
            createData()                    
        }       
    }
    private void createData(){  
        def roleInstance = Role.findByRoleType("Admin") 
        System.out.println("--------Instance-----------"+roleInstance.roleType);
        //def password = springSecurityService.encodePassword("admin")
        def userSec =new Tests(userName:"admin",password:"admin",mailId:"raghurame@techaffinity.com",roles:roleInstance,pwdSet:"Y").save(flush:true)
        System.out.println("--------Instance-----------"+userSec);
    }
    def destroy = {
    }
}

它正在执行,但记录未插入引导程序。请在这方面提供帮助。

4

1 回答 1

0

首先,为了调试东西,一个

.save(flush:true, failOnError:true)

优于标准

.save(flush:true)

如果验证失败,第二个将继续而不保存您的对象。

如果验证失败,第一个将引发异常并终止项目的启动。

加入一些 println 或更好的 log.debug 语句来查看 createDate() 是否真的执行也是一个好技巧。(if (!Domain.count())不是我最喜欢的风格 - 它工作正常吗?我更喜欢if (Domain.count()==0)......)

由于我总是手动设置 nullable:true|false 约束,我不知道默认值是什么,但我想这将是你的问题 - failOnError:true 将导致可见的验证异常,它会告诉你必须设置其他领域也...

请尝试一下,如果您不成功,请写评论...

于 2012-09-21T15:15:47.037 回答