hbm2ddl.auto更新并将新布尔属性添加到包含记录的现有表中

时间:2017-05-04 15:32:23

标签: jpa-2.0 hbm2ddl

我在PostgreSQL数据库中有一个带JPA的映射实体。

表存在,我有一些记录,现在我想添加一个简单的新布尔值(不是 B oolean)属性。

在日志中我可以正确地看到alter table使用not null,因为我选择了boolean而不是Boolean,它可以,但是.... 没有看到任何错误,数据库没有更新。

尝试直接在我的SQL客户端执行alter table我终于可以看到问题了,就是我刚刚添加的列包含空值... 显然,一旦创建该列,已存在的记录将具有空值。

那就是说,如果我想在已经至少有一条记录的表中创建一个非null属性,我该怎么办? 感谢

1 个答案:

答案 0 :(得分:0)

根据我对您的问题的理解,当您通过添加新的boolean列来更新表格时,您的早期添加的表格行会出现问题。

您之前的表行获得了新添加列的null值。

您可以使用JPA作为columnDefinition注释中的属性提供@Column来设置JPA实体属性的默认值。

如果您想在@Column(name = "is_active", columnDefinition="tinyint(1) default 1") private boolean isActive; 实体中添加新的布尔属性,可以试试这个

hbm2ddl

由于您使用的是boolean,因此不仅会为您创建一个新的true列,还会为其设置默认值{{1}}。对于该表中之前添加的所有行,它也将设置为true。

希望它有所帮助!