2016-12-28 63 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。