2013-05-06 98 views
1

我正在使用Hibernate和spring。這是我的模型類使用休眠時出現空指針異常

@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類,我得到一個空指針異常。我如何讓hibernate忽略數據庫中的空值,併爲bean類中的相應屬性設置默認值。正如你所看到的,我也使用了可空屬性。它不起作用。

+1

是'at_yearhalf'還是'financialyearfrom'' null'?那麼,他們被允許成爲。我建議你的邏輯爲可以有值的字段處理空值。另一個(不是很好的解決方案IMO)是使用getters和setter來檢查null並替換值。 – Magnilex 2013-05-06 10:51:55

+0

感謝您的建議。我正在檢索數據列表。在這個列表中,例如第三個值(db中的記錄)爲空,那麼我得到了異常。如果我做了一些嘗試,我無法處理表中剩餘的數據。我可以嗎? – 2013-05-06 10:57:23

回答

0

在查詢中使用COALESCE是否可以爲該字段分配缺省值(如果其爲空)?如果可能的話,這可能是解決這個問題的最佳方法,而不必調整你的代碼太多。

2

financialyearfromint但相應的列,你可能有,如果列被定義爲可空數據庫null值不能分配null值。

在Java原始變量處理空值,除去nullable=true和可能的加缺省值爲0,那麼從數據庫列的所有空值會轉換爲0或0.0等

或者

使用包裝類代替即Integer這將允許您保留從數據庫列中分配的空值。

同樣,以上兩種方法通常適用於在實體中使用的基本變量。

進一步增加@ID列不應可空海事組織,如果對應於主鍵列(在大部分是情況下),因此您的代碼將是錯誤的,因爲主鍵列不允許null值。

+0

@Maheshwaran K它解決你的問題嗎? – harsh 2013-05-06 11:15:44

+0

不,我嘗試了所有上述想法。我不知道爲什麼它沒有工作。我給了該特定屬性的默認值,但它仍然得到空值並拋出一個空指針異常。我仍然有一個疑問。使用包裝類接受空值?如果它在我訪問該屬性的getter時仍然會發生空指針異常。對? – 2013-05-07 04:29:18

+0

Atlast我以某種方式試圖給數據庫中的空記錄一些價值。現在沒有空指針異常的選項。但我的問題仍然存在。 – 2013-05-07 04:31:04