javax.persistence.Query.getResultList()返回空列表

时间:2015-08-04 14:20:01

标签: java spring hibernate jpa oracle11g

我在我的dao中使用getResultList ( List javax.persistence.Query.getResultList() )来获取对象列表。知道为什么它可能会返回{null,null,null,null,null,null,null,null,null,null}以查找在db中没有匹配的查询。这导致我的代码列表。 hasNext()打破哪个工作正常。我暂时没有参与这个项目(如果重要的话)。它正在使用

  

冬眠核-4.1.9.Final-sources.jar

我看到了this并且知道它现在正在返回列表。

  • 从哪个版本开始生效?
  • hibernate如何决定此列表的大小?
  • 如何远离这种错误?

4 个答案:

答案 0 :(得分:1)

猜测:您在调试器中检查了列表,但未查看size属性?在许多情况下,Hibernate会返回ArrayList而没有明确的capacity。然后ArrayList使用10个null元素初始化其内部数组(以避免在添加元素时反复创建数组)。但是如果你问list.iterator().hasNext()它应该返回false(以及list.isEmpty()返回truelist.size()会返回0。)

答案 1 :(得分:0)

只需在结果列表中添加isEmpty检查:

List<SomeType> resultList = query.getResultList();
if (resultList.isEmpty()){
    //Handle it
}

结果列表总是包含一些空值,我使用isEmpty检查以防止以后出错。

答案 2 :(得分:-1)

您可以通过检查List.hasNext()中的null元素来阻止这种情况。

 if(variable = list.next() !=null)  
    // do something

答案 3 :(得分:-1)

  • 至少版本3.2.7
  • 要避免这类崩溃,请始终始终验证输入。是否从表单,数据库,文件或任何类型的源中提取它。验证您收到的内容是否符合预期,否则丢弃/省略。