通过JPA避免向数据库表中插入“null”值
通过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