gpt4 book ai didi

grails - Grails使用非null而不是null更改我的表

转载 作者:行者123 更新时间:2023-12-02 14:20:53 25 4
gpt4 key购买 nike

我正在用grails开发一个个人项目,以便学习此功能强大的工具。
将两个新字段(x,y)添加到域类“Post”时遇到了此问题:

class Post {

long id;
Date creationDate;
String text;
byte[] image;
Style style;

long likeCount;
long dislikeCount;

User owner;

//coordinates on the wall
int x;
int y;

//this is probably to remove
static hasMany = [judgment : Judgment];

static constraints = {
text(nullable:true, maxSize:5000);
image(nullable:true, maxSize:1000000);
creationDate(nullable:true);
x(nullable:true);
y(nullable:true);
}
}

在postgres数据库中创建一些数据(Post记录)后,我添加了x和y。
但是当我在grails控制台中运行应用程序时,会出现此错误:
| Error 2012-03-04 12:04:23,670 [pool-5-thread-1] ERROR hbm2ddl.SchemaUpdate  -  Unsuccessful: alter table post add column x int4 not null
| Error 2012-03-04 12:04:23,672 [pool-5-thread-1] ERROR hbm2ddl.SchemaUpdate - ERROR: column "x" contains null values

这很奇怪,因为我在约束x,y中声明了可为null ..那么为什么grails试图更改表以声明x和y不为null?

最佳答案

它们是原始的int字段,因此可为空没有意义。您不能在类实例中存储null值,并且如果数据库中具有null值,则没有明智的默认转换为int值。您可能会认为0是null的明智值,但0和null通常并不等效。

如果要允许原始数字(intlong等)或boolean的空值,请使用非原始对象类IntegerLongBoolean等。原始类型的另一个问题是验证。由于它们默认为0(或falseboolean),因此您不知道用户是选择0还是false或他们根本没有选择,而您只是构造函数的默认值。因此,使它们成为非原始函数将使它们成为null,您可以知道它们是否做出了选择。

另外,不相关-无需声明id字段,因为Grails还是会为您添加一个。并失去分号;)

关于grails - Grails使用非null而不是null更改我的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9554392/

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