java – 避免通过JPA将’null’值插入数据库表

从JPA2开始,到目前为止感觉很舒服.但是,对于具有默认值的NON NULL数据库字段的具有null属性值的Entities来说,我有一个问题.

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

我目前的设置是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:空值在Spalte中»系统时间«verletzt非空限制(对于德语,抱歉,此消息是指’system_time’上的非空限制违例).

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

我想有能力在我的实体中设置’system_time’,或者让它为’null’,让数据库放置默认值.

欢迎任何帮助!

Regads
  克劳斯

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

在这里选择务实的方法,并初始化java中的所有值.从来没有听说过让JPA / Hibernate在插入/更新中留下空值的方法.

http://stackoverflow.com/questions/4508622/avoid-insert-null-values-to-database-table-via-jpa

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 避免通过JPA将’null’值插入数据库表