dav*_*era 3 postgresql hibernate
我正在使用 Springboot 和 PostgreSQL 12 开发一个 API。我使用 hibernate 创建了一个用户表,有问题的实体字段如下:
@Column(columnDefinition = "BOOLEAN NOT NULL DEFAULT FALSE")
private Boolean emailVerificationStatus = false;
Run Code Online (Sandbox Code Playgroud)
我的表似乎已正确生成:
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)
)
Run Code Online (Sandbox Code Playgroud)
我的问题是在运行应用程序时收到一条错误消息:
org.hibernate.PropertyValueException: not-null property references a null or transient value : fr.mycompany.app.io.entity.UserEntity.emailVerificationStatus
Run Code Online (Sandbox Code Playgroud)
默认情况下,当我创建用户时,它会发送一个空值。我可以通过在服务层中将值设置为 false 来解决这个问题,但这不是很优雅。另外,当我删除选项 nullable = false 时,它工作正常,但该值设置为 null 而不是获取默认值。当我尝试将用户发送到我的 API 时,postgresql 似乎不采用默认值(false)作为值。我想默认将 null 值强制更改为 false。
根据hibernate文档你可以尝试使用以下方法:
@Entity
@DynamicInsert
public class YourEntity {
@ColumnDefault("false")
private Boolean emailVerificationStatus;
// ...
}
Run Code Online (Sandbox Code Playgroud)
请注意,上面的实体使用了注解进行了注释@DynamicInsert,这样INSERT语句中就不会包含任何不包含值的实体属性。因此,这可以让您避免 @MikeOrganek 的答案中描述的情况。
| 归档时间: |
|
| 查看次数: |
2631 次 |
| 最近记录: |