Java 如何在没有警告的情况下从hibernate获取结果元素
在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
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();
}
但每次我使用迭代器时,我都会得到这个警告
迭代器是一种原始类型。对泛型类型迭代器的引用应该参数化
所以我试着用
迭代器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就足够了;