我必须编写一个方法,它能够在数据库中找到随机假期。但是当我在测试中使用这部分时
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);
}
答案 0 :(得分:6)
我怀疑这个是你获得NullPointerException
:
Integer vacationId = null;
Query query = entityManager.createQuery("from Vacation v where v.id = :id")
.setParameter("id", vacationId);
这是之前你是从Random
设置的 - 你将参数设置为空值。
老实说,这不是从数据库中查找随机记录的好方法,除非你知道假设每个ID都在0到2499之间。
基本上,您希望随机选择在数据库中执行,就像数据所在的那样。另一种方法是获取所有度假ID,选择该组的随机元素,然后为其加载数据 - 但这也不愉快。
答案 1 :(得分:0)
变化
Integer vacationId = null;
到
Integer vacationId = 0;
答案 2 :(得分:0)
你为什么要这样做?
Integer vacationId = null;
Query query = entityManager.createQuery("from Vacation v where v.id = :id")
.setParameter("id", vacationId);
vacationId有可能保持空值吗?如果没有,那么立即尝试随机。