基本上,正如标题所提到的,这就是我要尝试的操作,我已定义了此列
@Column(name="MATCH_SCORE", columnDefinition="NUMBER(10,4) default '-1.0000'")
private float matchScore;
所以我期望的是,如果该值在数据库中为空,则该值将以-1返回,但是,我仍然将其返回为0,这是一个问题,因为如果我在该值为0时必须采取特定的措施不幸的是,如果值是null,请不要这样做。不幸的是,我无法更改数据库,因此必须从应用程序一侧进行操作。
干杯。
答案 0 :(得分:2)
部分问题可能是原始float
不能为null
。相反,您可以使用Float
,但是映射NUMBER
(精确度)列的更好选择是BigDecimal
。试试这个版本:
@Column(name="MATCH_SCORE", columnDefinition="NUMBER(10,4) default -1.0000")
private BigDecimal matchScore;
还请注意,列默认值的目的是,如果发生插入并且未为该列指定任何值(或NULL
),则数据库将改用该默认值。默认值实际上与选择时发生的事情无关。该记录的列中的任何值都将返回。
答案 1 :(得分:0)
如果要使用基本类型float,而不是也没有舍入问题的可为空的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条目转换为某种东西,而不使用两个字段。