3

我正在学习 Entity Bean,但在进行实验室时出现此错误。我选择为 Entity 类(对于 Entity Product)创建一个 Session Bean。此文件由 NetBeans 自动创建。但它告知ProductsFacade.java uses unchecked or unsafe operations.

这是代码:

@Stateless
public class ProductsFacade implements ProductsFacadeRemote {
    @PersistenceContext(unitName = "NhungBHSE02082_SE0606_AdvJava_Lab10_11-ejbPU")
    private EntityManager em;

    public void create(Products products) {
        em.persist(products);
    }

    public void edit(Products products) {
        em.merge(products);`enter code here`
    }

    public void remove(Products products) {
        em.remove(em.merge(products));
    }

    public Products find(Object id) {
        return em.find(Products.class, id);
    }

    public List<Products> findAll() {
        return em.createQuery("select object(o) from Products as o").getResultList();
    }

    public List<Products> findRange(int[] range) {
        Query q = em.createQuery("select object(o) from Products as o");
        q.setMaxResults(range[1] - range[0]);
        q.setFirstResult(range[0]);
        return q.getResultList();
    }

    public int count() {
        return ((Long) em.createQuery("select count(o) from Products as o").getSingleResult()).intValue();
    }
}
4

2 回答 2

2

非泛型的Query.getResultList返回值List被隐式转换为List<Products>. 现在,因为List是非泛型的,所以编译器没有必要的信息来确保它实际上是Productss 的列表。这就是编译器显示警告的原因。

即使编译器不知道,但你知道它实际上总是一个Productss 的列表,这保证了强制转换在运行时永远不会失败,所以你可以@SuppressWarnings("unchecked")在这里用注解来装饰你的方法

@SuppressWarnings("unchecked")
public List<Products> findAll() {
    return em.createQuery("select object(o) from Products as o").getResultList();
}

这将消除警告。

另外:其他方法是使用TypedQuery.

于 2012-11-21T04:32:02.787 回答
2

警告是由于以下方法:

public List<Products> findAll() {
    return em.createQuery("select object(o) from Products as o").getResultList();
}

public List<Products> findRange(int[] range) {
    ...
    return q.getResultList();
}

内部发生的是query.getResultList()返回 generic List。列表中的每个对象都是类型Products。你知道,但编译器不知道。类型只能在运行时确定。所以编译器显示警告uncheck or unsafe operation。您可以放心地忽略此警告。

如果你真的很担心,那么你可以在@SuppressWarnings("unchecked")这两个方法中添加注解,让警告消失。

于 2012-11-21T04:33:34.780 回答