Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在没有警告的情况下从hibernate获取结果元素_Java_Hibernate - Fatal编程技术网

Java 如何在没有警告的情况下从hibernate获取结果元素

Java 如何在没有警告的情况下从hibernate获取结果元素,java,hibernate,Java,Hibernate,在hibernate中,我总是进行查询,并从中获取记录,如下所示: Query q = em.createQuery("FROM Product WHERE productCode=:productCode"); q.setParameter("productCode", productCode); if(q.getResultList().isEmpty()) { return null; } Iterator i = q.getR

在hibernate中,我总是进行查询,并从中获取记录,如下所示:

Query q = em.createQuery("FROM Product WHERE productCode=:productCode");
    q.setParameter("productCode", productCode);
    if(q.getResultList().isEmpty()) {
        return null;
    }       
    Iterator i = q.getResultList().iterator();
    Product pp = null;
    if(i.hasNext()) {
        pp = (Product)i.next();
    }
但每次我使用迭代器时,我都会得到这个警告

迭代器是一种原始类型。对泛型类型迭代器的引用应该参数化

所以我试着用 迭代器getElement=q.getResultList.Iterator;但在此之后,我有一个新的警告:

类型安全:类型迭代器的表达式需要未经检查的转换才能符合迭代器

但在那之后,我使用迭代器q.getResultList.Iterator进行了更改;有一个新的警告:

类型安全性:未选中从迭代器到迭代器的强制转换

所以我认为我做错了什么,但是什么呢?有什么建议吗?

试试:

TypedQuery<Product> q = em.createQuery("FROM Product WHERE productCode=:productCode", Product.class);
q.setParameter("productCode", productCode);
if(q.getResultList().isEmpty()) {
    return null;
}       
List<Product> results = q.getResultList();
Iterator<Product> i = results.iterator();
Product pp = null;
if(i.hasNext()) {
    pp = i.next();
}
编辑:我使用了这个来源 非常重要:

Query和TypedQuery都定义了getResultList方法,但是 查询的版本返回原始类型非泛型的结果列表 而不是参数化的泛型类型


警告出现在迭代器i=q.getResultList.Iterator上;就像我写的那样,TypedQuery可能会解决这个问题,因为您可以得到一个具有通用类型的列表。在我们的例子中,它将是一个产品。为什么要使用列表,然后将列表放入迭代器中?我更改了objectDB端的示例,但这也有助于看到我们有一个产品列表。我们现在也可以将结果用于其他操作,但在您的情况下,使用迭代器i=q.getResultList.Iterator就足够了;