2016-12-28 62 views
0

之前保存我有以下的域非空属性引用瞬态值 - 瞬态的实例必须当前操作

  class User { 

Boolean accountLocked 
String password 
Boolean passwordExpired 
Boolean enabled 
String username 
String name 
String surname 
String gender 
String urlPicture 
String cellphone 
String address 
Integer pc 
String permission 
String email 
Date created 
Boolean accountExpired 

static hasMany = [customerOnlines: CustomerOnline, 
        partners: Partner, 
        roles: Role, 
        salesmans: Salesman, 
        subsidiaries: Subsidiary] 

static mapping = { 
    tablePerHierarchy false 
    id generator: 'identity' 
    table '`user`' 
    password column: '`password`' 
    email unique: true 
} 

static constraints = { 
    accountLocked nullable: true, default: false 
    password nullable: true 
    passwordExpired nullable: true, default: false 
    enabled nullable: true, default: true 
    username nullable: true, maxSize: 45 
    name nullable: true, maxSize: 45 
    surname nullable: true, maxSize: 100 
    gender nullable: true, maxSize: 15 
    urlPicture nullable: true 
    cellphone nullable: true, maxSize: 50 
    address nullable: true 
    pc nullable: true 
    permission nullable: true 
    created nullable: true 
    accountExpired nullable: true, default: false 
} 

    class Subsidiary { 

String subsidiaryName 
Date dob 
User user 

static hasMany = [partners: Partner, 
        phones: Phone, 
        salesmans: Salesman] 
static belongsTo = [Partner, User] 

static mapping = { 
    id generator: "identity" 
    version false 
} 

static constraints = { 
    subsidiaryName nullable: true, maxSize: 100 
    dob nullable: true 
} 

的问题是试图创建一个新的子公司

def save(Subsidiary subsidiary) { 

    System.out.println(params) 
    def usuario = new User(name:params.name,surname:params.surname,address:params.address,cellphone:params.cellphone,gender:params.gender,username:params.username,password:params.password,pc:params.pc) 
    usuario.save flush:true 
    def subsidiaria= new Subsidiary(name:params.namesub,user:usuario) 


    subsidiaria.save flush:true 



    request.withFormat { 
     form multipartForm { 
      flash.message = message(code: 'default.created.message', args: [message(code: 'subsidiary.label', default: 'Subsidiary'), subsidiary.id]) 
      redirect view: 'create' 
     } 
     '*' { respond subsidiary, [status: CREATED] } 
    } 
} 

我得到错误非空属性引用subsidiaria.save flush:true上的空值或瞬态值,但我无法找到问题,即使我使用usuario.addToSubsidiaries(subsidiaria).save()它仍然不工作,并且 一直给我同样的错误。

回答

0

我找出问题是与控制器本身,不幸的是我不得不把两个表的所有PARAMS这样

 user.accountLocked=params.accountLocked 
    user.password=params.password 
    user.passwordExpired=params.passwordExpired 
    user.enabled=params.enabled 
    user.username=params.username 
    user.name=params.name 
    user.surname=params.surname 
    user.gender=params.gender 
    user.urlPicture=params.urlPicture 
    user.cellphone=params.cellphone 
    user.address=params.address 
    user.pc=params.pc 
    user.permission=params.permission 
    user.email=params.email 
    user.created=params.created 
    user.accountExpired=params.accountExpired 

,我马上就救喜欢

 user.save flush:true 
    user.addToSubsidiaries(subsidiary) 
    user.save flush:true 

后两个表更新了所提供的新信息,看起来像Grails无法同时处理2个不同的bean。