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

19 浏览
0 Comments

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

我刚开始使用JPA2,目前感觉还不错。但是我在持久化实体时遇到了一个问题,即将空属性值的实体持久化到非空数据库字段的默认值时出现问题。

我希望能够将实体属性保留为空,并让数据库插入默认值。

我当前的设置是使用openJPA和PostgreSQL。

我有一个名为VERSION的数据库表(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配置将数据库字段映射到实体(除了'status')。

我希望能够插入一个没有设置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'上的Not-Null-Constraint违规)。

那么我该怎么办呢?这是一个JPA还是数据库的问题。

我能否配置JPA以从INSERT SQL语句中排除空属性。

我希望能够在我的实体中设置'system_time',或者让它保持'null'并由数据库插入默认值。

任何帮助都将不胜感激!

谢谢!

Klaus

0