在jpa@column中声明的默认值(column nDefinition.)持久化时未设置 [英] Default value declared in JPA @Column( columnDefinition ... ) not set when persisted
本文介绍了在jpa@column中声明的默认值(column nDefinition.)持久化时未设置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的Java实体中有如下属性:
@Basic(fetch = FetchType.LAZY) //I tried without this as well
@Column(name = "value_x", columnDefinition = "bigint default 0")
private Long valueX;
在pgAdmin的表定义中,我看到:
value_x bigint DEFAULT 0,
但是在插入对象时(此属性为NULL),列为空/NULL,没有插入零值。
任何人都会知道它为什么不插入默认值?使用EclipseLink。jpa
空值是因为如果没有实现特殊处理,推荐答案会显式地将null
值插入到该列中。columnDefinition
确实使用默认设置创建列,但它不会使JPA知道/或在之后遵守它。
并且它是一个可以为空的列,因此不会出现错误。看看在纯SQL中发生了什么,请考虑下表:
create table example (
col1 bigint default 42,
col2 bigint default 99
);
然后进行如下插入:
insert into example (col1) values (null);
然后选择:
select * from example;
将显示如下结果:
col1|col2
-+-
(空)|99
如果您需要在Java端管理默认值,则需要在Java端提供一些特殊功能。
例如,请参阅this question并注意,接受的答案不是工作答案,而是this answer。因此在实例化类时设置值:private Long valueX = 0;
另一种方法是按照this answer for different question的建议,使用@PrePersist
:
@PrePersist
void prePersist() {
if (this.valueX == null)
this.valueX = 0;
}
这篇关于在jpa@column中声明的默认值(column nDefinition.)持久化时未设置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文