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ます。は非ジェネリックであるため、コンパイラには、それが実際に s のリストであることを確認するために必要な情報がありません。そのため、コンパイラは警告を表示します。ListList<Products>ListProducts

コンパイラは知りませんが、実際には常に s のリストになることがわかっています。これにより、実行時にキャストが失敗しないことが保証されるため、ここProductsでアノテーションを使用してメソッドを装飾できます@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 または unsafe operationという警告を表示します。この警告は無視しても問題ありません。

本当に心配な場合は、@SuppressWarnings("unchecked")これら 2 つのメソッドに注釈を追加して、警告を非表示にすることができます。

于 2012-11-21T04:33:34.780 に答える