在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();
}
但每次我使用Iterator我都有这个警告
迭代器是原始类型。对泛型类型迭代器的引用应该参数化
所以我试过用
Iterator< Product> getElement = q.getResultList().iterator();
但之后我发出了这个新警告:
类型安全:Iterator类型的表达式需要未经检查的转换以符合Iterator
但在那之后我改为"(Iterator< Product >)q.getResultList().iterator();"
,有一个新警告:
类型安全:从Iterator到Iterator
取消选中
所以我认为我做错了什么,但是什么?有什么建议吗?
答案 0 :(得分:1)
试试:
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();
}
编辑:我使用了这个来源http://www.objectdb.com/java/jpa/query/execute 非常重要:
Query和TypedQuery都定义了一个getResultList方法,但是 Query版本返回原始类型的结果列表(非泛型) 而不是参数化(通用)类型