1

我正在使用休眠和弹簧。这是我的模型课

@Entity
@NamedNativeQueries({@NamedNativeQuery(
        name = "CSI_TARGET", 
        query = "select * from CSITARGET('CSIINDEX',2)",
        resultClass = CSITarget.class)})
public class CSITarget {


    @Column(name="csi_target")
    private BigDecimal csi_target;

    @Id
    @Column(name="financialyearfrom"  ,nullable = true)
    private int  financialyearfrom =0;

    @Column( name="at_yearhalf" , nullable = true)
    private  String at_yearhalf = "";

    public BigDecimal getCsi_target() {
        return csi_target;
    }

    public void setCsi_target(BigDecimal csi_target) {
        this.csi_target = csi_target;
    }

    public int getFinancialyearfrom() {
        return financialyearfrom;
    }

    public void setFinancialyearfrom(int financialyearfrom) {
        this.financialyearfrom = financialyearfrom;
    }

    public String getAt_yearhalf() {
        return at_yearhalf;
    }

    public void setAt_yearhalf(String at_yearhalf) {
        this.at_yearhalf = at_yearhalf;
    }

我正在使用 Hibernate 调用 postgres 数据库中的存储过程。存储过程返回一个映射到该模型类的表。现在我的问题是,从数据库返回的表包含一个空值。我需要对数据进行一些操作。现在由于空值被映射到 bean 类,我得到一个空指针异常。如何让休眠忽略数据库中的空值,并为 bean 类中的相应属性设置默认值。如您所见,我也使用了可为空的属性。它不起作用。

4

2 回答 2

2

financialyearfrom如果列被定义为可为空int,则无法通过null相应的列为它分配值,您可能在数据库中具有值。null

为了处理 java 原始变量中的空值,删除nullable=true并可能添加默认值 0,因此 db 列中的所有空值都将转换为 0 或 0.0 等。

或者

改用包装类,即Integer允许您保留从 db 列分配的空值。

同样,以上两种方法通常适用于在Hibernate实体中使用的原始变量。

进一步添加@ID列不应为空 IMO,如果它对应于主键列(在大多数情况下是),那么您的代码将是错误的,因为主键列不允许null值。

于 2013-05-06T10:57:55.897 回答
0

Would it be possible to use COALESCE in your query to assign a default value to that field if its null? If that's possible that's probably the best way to fix this issue w/o having to tweak your code too much.

于 2013-05-06T10:56:53.360 回答