gpt4 book ai didi

hibernate - 非空属性引用一个 transient 值-必须在当前操作之前保存 transient 实例

转载 作者:行者123 更新时间:2023-12-02 15:49:46 25 4
gpt4 key购买 nike

我有以下域名

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] }
}
}

我收到错误not-null属性,在 subsidiaria.save flush:true上引用了null或 transient 值,但是我找不到问题,即使我使用 usuario.addToSubsidiaries(subsidiaria).save(),它也仍然无法正常工作,并且
一直给我同样的错误。

最佳答案

我发现问题出在 Controller 本身上,不幸的是我不得不像这样放置两个表的所有参数

     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。

关于hibernate - 非空属性引用一个 transient 值-必须在当前操作之前保存 transient 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41368641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com