2013-07-10 71 views
0

我必須編寫一個方法,它能夠在數據庫中找到隨機度假。但是當我在測試中使用這部分時爲什麼不隨機工作?

Random id = new Random(); 
vacationId = id.nextInt(2500); 

我得到NullPoiterExeption。 但是,當我只是打印

vacationId = 2500; 

或其他一些數字,一切都沒問題。

這是整個方法

public Vacation findRandomVacation() { 
    Integer vacationId = null; 
    Query query = entityManager.createQuery("from Vacation v where v.id = :id") 
       .setParameter("id", vacationId); 
    if (query.getResultList().isEmpty()) { 
     Random id = new Random(); 
     vacationId = id.nextInt(2500); 
     query = entityManager.createQuery("from Vacation v where v.id = :id") 
       .setParameter("id", vacationId); 
    } 
    return (Vacation) query.getResultList().get(0); 
} 

這是測試的主體:

@Test 
public void testVacationApprovalResultDao() { 
    Vacation testVacation = findRandomVacation(); 
    VacationApproval testVacationApproval = findVacationApprovalDAO(testVacation); 
    List<VacationApprovalResult> testVacationApprovalResult = getVacationApprovalResultByManager(testVacationApproval); 
    Set<VacationApprovalResult> setVacationApprovalResult = testVacationApproval.getVacationApprovalResults(); //mistake is here 
    List<VacationApprovalResult> testVacationApprovalResult2 = new ArrayList<VacationApprovalResult>(); 
    testVacationApprovalResult2.addAll(setVacationApprovalResult); 

    assertEquals(testVacationApprovalResult, testVacationApprovalResult2); 
} 

回答

6

我懷疑這個是你在哪裏得到的NullPointerException

Integer vacationId = null; 
Query query = entityManager.createQuery("from Vacation v where v.id = :id") 
      .setParameter("id", vacationId); 

這是之前您已將它從Random中設置 - 您將該參數設置爲空值。

說實話,雖然,這不是從數據庫中找到一個隨機記錄的一個好辦法,除非你知道有從0每個ID休假到2499

基本上你想要的隨機在數據庫處選擇執行,因爲這是數據所在的位置。另一種方法是獲取全部假期ID,挑選該集合的隨機元素,然後爲其加載數據 - 但這也不令人愉快。

+0

我知道每個ID都有假期。當我把這個vacationId = 2500;我只改變了隨機部分,而不是第一個字符串 –

+1

@JaneMakedonskaya:什麼字符串?沒有任何字符串。隨機'本身就很好 - 所以要麼有更多的背景,你沒有告訴我們,或者是有些奇怪的事情正在發生。當你沒有提供'id'參數的值時,我真的不希望它會變得那麼遠。我懷疑你的診斷不太正確。它沒有幫助你沒有向我們顯示異常實際發生的地方 - 請將堆棧跟蹤編輯到你的問題中。 –

+0

我的意思是線。我不是母語英語的人,對不起。在這個地方,豁免情況發生在評論 –

0

變化

Integer vacationId = null; 

Integer vacationId = 0; 
+0

同一行中的相同錯誤:( –

0

你爲什麼要這麼做?

Integer vacationId = null; 
Query query = entityManager.createQuery("from Vacation v where v.id = :id") 
      .setParameter("id", vacationId); 

是否有可能爲vacationI持有空值?如果不是,那麼立即嘗試隨機。