繁体   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