避免通过 JPA 将“null”值插入数据库表
2022-09-01 11:31:34
我从JPA2开始,到目前为止感觉很舒服。但是,在为具有默认值的NON NULL数据库字段保留具有空属性值的实体时,我遇到了一个问题。
我希望能够将实体属性保留为空,并让数据库插入默认值。
我目前的设置是 openJPA with PostgreSQL。
我有这个版本数据库表(Vorgabewert = 默认值):
Spalte | Typ | Attribute
----------------+-----------------------------+----------------------------
status_ | smallint | not null Vorgabewert 0
time_ | timestamp without time zone | not null
system_time | timestamp without time zone | not null Vorgabewert now()
version | character varying(20) | not null
activationtime | timestamp without time zone |
importtime | timestamp without time zone |
我有一个实体(Java DTO),它通过xml配置映射数据库字段(“状态”除外)。
我希望我可以插入一个没有设置的实体,并期望数据库将当前时间填充为默认值。system_time
JPA 构造以下 SQL 查询:
INSERT INTO public.version (version, activationtime, importtime, system_time, time_) VALUES (?, ?, ?, ?, ?) [params=?, ?, ?, ?, ?]
Postgres的反应是:
FEHLER: NULL-Wert in Spalte »system_time« verletzt Not-Null-Constraint
(抱歉德语,但此消息表示“system_time”上的非空约束冲突)。
那我该怎么办呢?这是JPA还是数据库问题。是否可以将 JPA 配置为从 INSERT SQL 语句中排除空属性。
我希望能够在我的实体中设置“system_time”,或者让它为“null”并让数据库输入默认值。
欢迎任何帮助!
雷加兹·克劳斯