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

时间:2017-05-25 07:48:17

标签: 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.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

取消选中

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

1 个答案:

答案 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版本返回原始类型的结果列表(非泛型)   而不是参数化(通用)类型