基本上,正如标题所提到的,这就是我要做的,我已经定义了此列
@Column(name="MATCH_SCORE", columnDefinition="NUMBER(10,4) default '-1.0000'")
private float matchScore;
所以我期望的是,如果该值在数据库中为空,则该值将以-1返回,但是,我仍然将其设为0,这是一个问题,因为如果我不这样做,则必须执行特定的操作(如果该值为零) '如果值为null则不要这样做,不幸的是,我无法更改数据库,因此必须从应用程序一侧进行操作。
干杯。
这里的部分问题可能是原语float
不能为null
。相反,您可以使用Float
,但映射NUMBER
(精确度)列的更好选择是BigDecimal
。试试这个版本:
@Column(name="MATCH_SCORE", columnDefinition="NUMBER(10,4) default -1.0000")
private BigDecimal matchScore;
还请注意,列默认值的目的是,如果发生插入并且未为该列指定任何值(或NULL
),则数据库将改用该默认值。默认值实际上与选择时发生的事情无关。该记录的列中的任何值都将返回。
如果要使用基本类型float,而不是也没有舍入问题的可为null的BigDecimal,请执行]
@Column(name="MATCH_SCORE", columnDefinition="NUMBER(10,4)") private Float matchScoreRaw; @Transient public float getMatchScore() { return matchScoreRaw == null ? Float.NaN : matchScoreRaw; } @Deprecated public Float getMatchScoreRaw() { return matchScoreRaw == null ? Float.NaN : matchScoreRaw; // Bad. }
将数据库的NULL表示为非数字。使用原始值的吸气剂可能有助于“修复”数据库,尽管使用NULL可能更好,因为我不知道NaN在数据库中如何表示以及是否可以再次读取。
最好是将所有NULL条目转换为某种东西,而不使用两个字段。