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

3 回答 3

6

我怀疑是你得到的地方NullPointerException

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

这是您设置它之前Random- 您将参数设置为空值。

不过老实说,这不是从数据库中随机查找记录的好方法,除非您知道每个 ID 都在 0 到 2499 之间的假期。

基本上,您希望在数据库中执行随机选择,因为那是数据所在的位置。另一种方法是获取所有假期 ID,从该集合中选择一个随机元素,然后为其加载数据 - 但这也不愉快。

于 2013-07-10T12:38:05.353 回答
0

改变

 Integer vacationId = null;

Integer vacationId = 0;
于 2013-07-10T12:43:34.053 回答
0

你为什么要这样做 ?

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

VacationId 是否有可能持有空值?如果没有,请立即尝试使用随机数。

于 2013-07-10T12:59:11.403 回答