簡體   English   中英

為什么隨機不起作用?

[英]Why doesn't random work?

我必須編寫一個方法,該方法能夠在數據庫中找到隨機的Vacation。 但是當我在測試中使用這部分時

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);
}

我懷疑是您獲取NullPointerException

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

這是您從Random設置之前 -將參數設置為null值。

不過,老實說,這不是從數據庫中查找隨機記錄的好方法,除非您知道每個ID從0到2499的假期。

基本上,您希望在數據庫上執行隨機選擇,因為這就是數據所在的位置。 一種替代方法是獲取所有休假ID,從該集合中選擇一個隨機元素,然后為其加載數據-但這也不令人滿意。

更改

 Integer vacationId = null;

Integer vacationId = 0;

你為什么要這樣做 ?

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

VacationId是否可以保留null值? 如果沒有,則立即嘗試隨機。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM