2013-04-10 36 views
0

我必須檢索數據庫條目。我知道我寫的查詢只返回一行。爲此我使用getSingleResult。但是,當查詢返回null時,我無法捕捉它。我該如何解決這個問題? 下面是一段代碼,我有使用實體管理器的getSingleResult檢查數據庫的空返回

 try { 
      result = em.createQuery("SELECT d FROM fields d WHERE d.fieldID = :fieldID", Field.class) 
         .setParameter("fieldID", fieldID) 
         .getSingleResult(); 

//manual null check only seems to work. But it seems tedious to check every DB column for null value :(

     if((result.getValsText() == null)){ 
       result = new Field(); 
       result.setValText("empty"); 

      } 
     } catch (NoResultException e) { 
      result = new Field(); 
      result.setValText("empty"); 

     } 

請指教。

感謝

回答

0

對於非-ID屬性,你可以

  • Query

getResultList將回到你的常規查詢或更好

  • 呼叫getResultList()之前發送COUNT查詢如果沒有找到結果,則爲空列表。要得到您的單一結果,請檢查列表是否爲空,並在其上調用get(0)

    如果屬性是@Id屬性,調用entityManager.find(MyEntity.class, id); - find回報null如果沒有結果被發現,你的實體的單個實例,如果它已經找到。

    編輯 - 最後一個選項是出於性能和可讀性的原因。使用第二個選項(列表),你不能使用最後一個選項。

  • +0

    我似乎得到一個null bcos沒有找到記錄。我想這就是爲什麼NoResultException不會被拋出?那麼如何使用getSingleResult來檢查這個? – user900785 2013-04-10 08:42:46

    +0

    @ user900785 - 好的,就是這一點 - 沒有辦法僅僅使用'getSingleResult'來檢查 - try/catch是你可以用它做的唯一的事情,所以只有在你肯定能夠找到結果的地方使用它。對於查詢中沒有發現任何內容的錯誤,您可以使用我答案中的3個選項之一(您最好使用第三個選項) – kostja 2013-04-10 09:04:10

    +0

    我有一個不同的問題。我試過你的建議,那是當我意識到一些列條目是NULL的時候。因此我得到一個空指針異常。我如何檢查這個? – user900785 2013-04-10 13:09:12

    相關問題