FrV*_*aBe 18 java postgresql orm jpa jpa-2.0
我从JPA2开始,到目前为止感觉相当舒适.但是,当使用默认值为NON NULL数据库字段保留具有null属性值的实体时,我遇到了问题.
我希望能够将实体属性保留为null并让数据库插入默认值.
我目前的设置是使用PostgreSQL的openJPA.
我有这个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_timeset 的实体,并期望数据库将当前时间填充为默认值.
JPA构造以下SQL-Query:
INSERT INTO public.version (version, activationtime, importtime, system_time, time_) VALUES (?, ?, ?, ?, ?) [params=?, ?, ?, ?, ?]
Run Code Online (Sandbox Code Playgroud)
和Postgres作出反应:
FEHLER: NULL-Wert in Spalte »system_time« verletzt Not-Null-Constraint (对不起德语,但此消息表示'system_time'上的Not-Null-Constraint违规).
那我该怎么办?这是JPA还是数据库问题.我是否可以配置JPA以从INSERT SQL语句中排除空属性.
我希望能够在我的实体中设置'system_time'或让它为'null'并让数据库设置默认值.
欢迎任何帮助!
致克劳斯
Sto*_*ica 21
使用注释
@Column(insertable = false)
Run Code Online (Sandbox Code Playgroud)
将阻止在sql中生成的值.
ber*_*ert 19
我不会将数据库中的默认值与JPA结合使用.您必须在插入后读取实体,否则您将在实体状态和db状态之间不匹配.
在这里选择实用的方法并初始化java中的所有值.从来没有听说过告诉JPA/Hibernate在插入/更新中省略空值的方法.
小智 6
在Annotation @Column中,将atribute可插入为false,如下所示:
`@Column(name="system_time", insertable = false)`
或者,如果您需要检查值是否为NULL,则在表上进行"插入前触发".
| 归档时间: |
|
| 查看次数: |
33632 次 |
| 最近记录: |