避免通过JPA将“null”值插入数据库表

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

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

我当前的设置是带有PostgreSQL的openJPA

我有这个版本的数据库表(Vorgabewert=默认值):


Spalte | Typ |属性
----------------+-----------------------------+----------------------------
状态| smallint |非空Vorgabewert 0
时间|无时区的时间戳|不为空
system|u time |无时区的时间戳|非空Vorgabewert now()
版本|字符变化(20)|不为空
activationtime |无时区的时间戳|
importtime |不带时区的时间戳|

我有一个实体(JavaDTO),它通过xml配置映射数据库字段(状态除外)

我希望我可以插入一个没有设置system\u time的实体,并希望数据库将当前时间作为默认值填充

JPA构造以下SQL查询:

插入public.version(版本、激活时间、导入时间、系统时间、时间)值(?,,,,,?)[参数=,,,,,,,,,?]

而Postgres的反应是:

FEHLER:NULL Wert in Spalte»system_time«verletzt Not NULL Constraint(德语很抱歉,但此消息表示在“system_time”上违反了Not NULL约束)

那我该怎么办?这是JPA还是数据库问题。
我可以将JPA配置为从INSERT SQL语句中排除null属性吗

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

欢迎任何帮助

重新获得
克劳斯

我不会将数据库中的默认值与JPA结合使用。您必须在插入后读回实体,否则实体状态和数据库状态之间不匹配

在这里选择实用的方法并初始化java中的所有值。从未听说过告诉JPA/Hibernate在insert/update中省略空值的方法

发表评论