gpt4 book ai didi

java - 由于 id 为空,Grails 属于关系在保存时失败

转载 作者:行者123 更新时间:2023-11-30 07:42:30 25 4
gpt4 key购买 nike

我的 GORM 关系管理遇到了一些问题。基本上有 4 个领域类属于这个问题的范围。 House 是一个拥有多个 Queue 的餐厅,每个队列都有多个 Ticket。这些票证属于客户

主要问题是,当我使用 CustomerQueue 实例创建 Ticket 时,hibernate 会提示 customer_ID code> 为 nullTicket 域类如下所示:

class Ticket implements Comparable<Ticket> {
int number;
boolean isValid;

static belongsTo = [customer: Customer, queue: Queue]

public Ticket(Customer customer, Queue queue,int number){
println "Create ticket, customer: ${customer}, queue:${queue}, number:${number}";
customer = customer;
queue = queue;
number = number;
isValid = true;
}
}

错误发生在一个 Controller 类中,我在其中创建了 Ticket 并保存它。

//c and q are Customer and Queue instances that have passed null check
Ticket t = new Ticket(c, q, 10);//In the constructor I see the Customer and Queue instances are not null indeed
t.save(flush: true);
if (t.hasErrors()) {
log.error t.errors;
return;
}

错误是一个空的Customer_ID,我不太明白。我已将客户和队列传递到 Ticket 构造函数中,但为什么在保存时 Grails 似乎与 id 不匹配?我已验证客户 ID 已成功生成。请指出我在 GORM 设置中犯的错误。

消息:列“CUSTOMER_ID”不允许为 NULL; SQL语句:
插入票证(id,版本,customer_id,is_valid,number,queue_id)值(null,?,?,?,?,?)[23502-176]

最佳答案

这实际上是参数和字段同名的遮蔽问题。只需像这样更改您的构造函数:

class Ticket implements Comparable<Ticket> {
int number;
boolean isValid;

static belongsTo = [customer: Customer, queue: Queue]

public Ticket(Customer customer, Queue queue, int number) {
println "Create ticket, customer: ${customer}, queue:${queue}, number:${number}";
this.customer = customer;
this.queue = queue;
this.number = number;
this.isValid = true;
}
}

您必须使用this构造函数内的关键字,因为域字段 customerqueue其他由构造函数参数显示。

https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html

因为customer = customer您正在将构造函数参数的值分配给自身,而不是您应该这样做 this.customer = customer (其他人都一样)

关于java - 由于 id 为空,Grails 属于关系在保存时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34462290/

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