我从JPA2开始,到目前为止感觉很舒服.但是,当为具有默认值的非null数据库字段持久化具有null属性值的实体时,我遇到了一个问题.

我希望能够将entity属性保留为null,并让数据库插入默认值.

我目前的设置是带有PostgreSQL的openJPA.

我有这个版本的数据库表(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=?, ?, ?, ?, ?]

而博士后的react 是:

FEHLER: NULL-Wert in Spalte »system_time« verletzt Not-Null-Constraint(德语很抱歉,但此消息表示违反"系统时间"上的Not Null约束).

那我该怎么办?这是JPA还是数据库问题.

我希望能够在我的实体中设置"system_time",或者让它为"null",并让数据库输入默认值.

欢迎任何帮助!

重新获得

推荐答案

我不会与JPA一起依赖数据库中的默认值.您必须在插入后重新读取实体,否则实体状态和数据库状态之间不匹配.

在这里 Select 实用的方法,并在java中初始化所有值.从来没有听说过告诉JPA/Hibernate在插入/更新中省略空值的方法.

Postgresql相关问答推荐

如何在Common Lisp中使用Postmodern在表更改时获得通知?

端口5432失败:致命:数据库xxx&不存在.在PostgreSQL数据库中

Select 二维数组中的特定元素PostgreSQL

在特定值的组聚合中添加标签列作为结果

PostgreSQL中如何在同一行中存储多个与单个值相关的ID?

需要用 jack/pgx 更新 golang 中复合类型的 PSQL 行

在 postgresql 数据库 timestampz 中保留用户偏移量

Postgres 14 反斜杠 Z 没有给出正确的输出

在 jOOQ 中 Select 相同的命名列

从 sql 查询 postgres 9.4 创建嵌套 json

并发刷新materialized视图

Postgres 删除表语法错误

H2 postgresql mode模式似乎不起作用

如何为查询执行设置语句超时

PG::ConnectionBad FATAL:role "Myname" does not exist

PostgreSQL regexp_replace() 只保留一个空格

使用 cte (postgresql) 的结果更新

如何在 JPA 中使用 Postgres JSONB 数据类型?

PostgreSQL - 如何在不同时区呈现日期?

性能调优:为布尔列创建索引