Float原语,如果可能,则返回null;如果DB中的值为null,则返回一个特定值

问题描述 投票:0回答:2

基本上,正如标题所提到的,这就是我要做的,我已经定义了此列

@Column(name="MATCH_SCORE", columnDefinition="NUMBER(10,4) default '-1.0000'")
private float matchScore;

所以我期望的是,如果该值在数据库中为空,则该值将以-1返回,但是,我仍然将其设为0,这是一个问题,因为如果我不这样做,则必须执行特定的操作(如果该值为零) '如果值为null则不要这样做,不幸的是,我无法更改数据库,因此必须从应用程序一侧进行操作。

干杯。

java jpa
2个回答
1
投票

这里的部分问题可能是原语float不能为null。相反,您可以使用Float,但映射NUMBER(精确度)列的更好选择是BigDecimal。试试这个版本:

@Column(name="MATCH_SCORE", columnDefinition="NUMBER(10,4) default -1.0000")
private BigDecimal matchScore;

还请注意,列默认值的目的是,如果发生插入并且未为该列指定任何值(或NULL),则数据库将改用该默认值。默认值实际上与选择时发生的事情无关。该记录的列中的任何值都将返回。


0
投票

如果要使用基本类型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条目转换为某种东西,而不使用两个字段。

© www.soinside.com 2019 - 2024. All rights reserved.