postgresql - 使用实体中的默认值与 PostgreSQL hibernate

我正在使用 Springboot 和 PostgreSQL 12 开发 API。 我用 hibernate 创建了一个用户表,有问题的实体字段如下:

@Column(columnDefinition = "BOOLEAN NOT NULL DEFAULT FALSE")
private Boolean emailVerificationStatus = false;

我的表格似乎已正确生成:

create table users (
   id int8 generated by default as identity,
    email varchar(120) not null,
    email_verification_status boolean default false not null,
    email_verification_token varchar(255),
    encrypted_password varchar(255) not null,
    first_name varchar(50) not null,
    last_name varchar(50) not null,
    user_id varchar(255) not null,
    primary key (id)
)

我的问题是在运行应用程序时收到一条错误消息:

org.hibernate.PropertyValueException: not-null property references a null or transient value : fr.mycompany.app.io.entity.UserEntity.emailVerificationStatus

默认情况下,当我创建用户时,它会发送一个空值。我可以通过在我的服务层中将值设置为 false 来解决这个问题,但它不是很优雅。此外,当我删除选项 nullable = false 时,它​​工作正常但值设置为 null 而不是获取默认值。当我尝试将用户发送到我的 API 时,postgresql 似乎没有将默认值 (false) 作为值。我想在默认情况下强制将 null 值更改为 false。

最佳答案

根据hibernate documentation您可以尝试使用以下方法:

@Entity
@DynamicInsert
public class YourEntity {

  @ColumnDefault("false")
  private Boolean emailVerificationStatus;

  // ...
}

请注意,上面的实体使用 @DynamicInsert 注释进行注释,因此 INSERT 语句不包含任何不包含值的实体属性。因此,这可以让您避免@MikeOrganek 的回答中描述的情况。

关于postgresql - 使用实体中的默认值与 PostgreSQL hibernate ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62830411/

相关文章:

common-lisp - 如何在普通的 lisp 中创建一个位数组?

java - 在 Java 中不使用类创建对象

azure - 卡夫卡与 SignalR

amazon-web-services - 我们可以在 Route 53 AWS DNS 服务中创建

python - 如何使用 gspread 在 google 工作表单元格中插入任何超链接

python - 在 django urls.py 中访问请求对象

apache-spark - 我可以获取 Spark 读取的文件的元数据吗

python - 我怎样才能遍历这个字典而不是对键进行硬编码

ruby-on-rails - 带有 rubocop 错误的 Rails 模型 - 指定 `:inv

php - 如何在 WooCommerce 中获取产品特定的元数据