Java 为什么';不是随机工作吗?

Java 为什么';不是随机工作吗?,java,testing,random,Java,Testing,Random,我必须写一个方法,它能够在数据库中找到随机假期。但是当我在测试中使用这个部件时 Random id = new Random(); vacationId = id.nextInt(2500); 我得到NullPoiterExeption。 但是当我刚打印的时候 vacationId = 2500; 或者其他号码,一切都好 这就是整个方法 public Vacation findRandomVacation() { Integer vacationId = null; Quer

我必须写一个方法,它能够在数据库中找到随机假期。但是当我在测试中使用这个部件时

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);
}
@测试
public void testVacationApprovalResultDao(){
休假测试休假=findRandomVacation();
休假批准testVacationApproval=findVacationApprovalDAO(testVacation);
列出testVacationApprovalResult=getVacationApprovalResultByManager(testVacationApproval);
Set-setVacationApprovalResult=testVacationApproval.getVacationApprovalResults();//这里有错误
List testVacationApprovalResult2=newarraylist();
TestVacationApprovalResult 2.addAll(设置VacationApprovalResult);
资产质量(testVacationApprovalResult、testVacationApprovalResult 2);
}
我怀疑这就是您得到的
NullPointerException

Integer vacationId = null;
Query query = entityManager.createQuery("from Vacation v where v.id = :id")
            .setParameter("id", vacationId);
这是在您从
Random
设置参数之前-您正在将参数设置为空值

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

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

我怀疑这就是您得到的
NullPointerException

Integer vacationId = null;
Query query = entityManager.createQuery("from Vacation v where v.id = :id")
            .setParameter("id", vacationId);
这是在您从
Random
设置参数之前-您正在将参数设置为空值

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

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

更改

 Integer vacationId = null;

改变


你为什么要这样做

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

vacationId是否可以保留空值?如果没有,请立即尝试随机操作。

为什么要这样做

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

vacationId是否可以保留空值?如果没有,请立即尝试随机设置。

我知道每个id都有假期。当我设置这个假期id=2500;我只改变随机部分,而不是第一部分string@JaneMakedonskaya:什么弦?没有任何字符串
Random
本身很好——所以要么有更多你没有告诉我们的上下文,要么发生了一些非常奇怪的事情。当您没有提供
id
参数的值时,我真的不希望它走那么远。我怀疑你的诊断不太正确。您没有向我们展示异常实际发生的位置,这对我们没有帮助-请将堆栈跟踪编辑到您的问题中。我是指行。对不起,我不是以英语为母语的人。执行的地方如图所示comment@JaneMakedonskaya:好了,那是几行以后的事了-在调用
findVacationApprovalDAO
getVacationApprovalResultByManager
之后。。。我们不知道他们在做什么。你需要自己进一步诊断。也许你手动尝试的假期有一些随机假期没有的价值。@Jon Skeet yes?关于价值,你是对的。谢谢,我会继续诊断。我知道每个id都有假期。当我把这个假期id=2500;我只改变随机部分,而不是第一部分string@JaneMakedonskaya:什么弦?没有任何字符串
Random
本身很好——所以要么有更多你没有告诉我们的上下文,要么发生了一些非常奇怪的事情。当您没有提供
id
参数的值时,我真的不希望它走那么远。我怀疑你的诊断不太正确。您没有向我们展示异常实际发生的位置,这对我们没有帮助-请将堆栈跟踪编辑到您的问题中。我是指行。对不起,我不是以英语为母语的人。执行的地方如图所示comment@JaneMakedonskaya:好了,那是几行以后的事了-在调用
findVacationApprovalDAO
getVacationApprovalResultByManager
之后。。。我们不知道他们在做什么。你需要自己进一步诊断。也许你手动尝试的假期有一些随机假期没有的价值。@Jon Skeet yes?关于价值,你是对的。谢谢,我将继续诊断。同一行中的相同错误:(同一行中的相同错误:(