Java 具有取消选中或不安全操作的实体bean
我正在学习实体Bean,当我在做我的实验时,我遇到了这个错误。我选择为实体类创建一个会话Bean(对于实体Java 具有取消选中或不安全操作的实体bean,java,ejb,Java,Ejb,我正在学习实体Bean,当我在做我的实验时,我遇到了这个错误。我选择为实体类创建一个会话Bean(对于实体产品)。此文件由NetBeans自动创建。但是它通知ProductsFacade.java使用未经检查或不安全的操作。 代码如下: @Stateless public class ProductsFacade implements ProductsFacadeRemote { @PersistenceContext(unitName = "NhungBHSE02082_SE0606_
产品
)。此文件由NetBeans自动创建。但是它通知ProductsFacade.java使用未经检查或不安全的操作。
代码如下:
@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();
}
}
@无状态
公共类ProductsFacade实现ProductsFacadeRemote{
@PersistenceContext(unitName=“NhungBHSE02082\u SE0606\u AdvJava\u Lab10\u 11-ejbPU”)
私人实体管理者;
公共无效创建(产品){
em.persist(产品);
}
公共作废编辑(产品){
em.merge(products);`在此处输入代码`
}
移除公共空间(产品){
em.remove(em.merge(products));
}
公共产品查找(对象id){
返回em.find(Products.class,id);
}
公共列表findAll(){
返回em.createQuery(“将产品中的对象(o)选择为o”).getResultList();
}
公共列表findRange(int[]范围){
Query q=em.createQuery(“从产品中选择对象(o)作为o”);
q、 setMaxResults(范围[1]-范围[0]);
q、 setFirstResult(范围[0]);
返回q.getResultList();
}
公共整数计数(){
return((Long)em.createQuery(“将产品中的计数(o)选择为o”).getSingleResult()).intValue();
}
}
返回非泛型的列表
,并隐式转换为列表
。现在因为,List
是非泛型的,编译器没有必要的信息来确保它实际上是产品的列表。这就是编译器显示警告的原因
尽管编译器不知道,但您知道它实际上总是一个产品的列表,这保证了强制转换在运行时不会失败,因此您可以在这里用注释@SuppressWarnings(“未选中”)
来修饰您的方法
@SuppressWarnings("unchecked")
public List<Products> findAll() {
return em.createQuery("select object(o) from Products as o").getResultList();
}
@SuppressWarnings(“未选中”)
公共列表findAll(){
返回em.createQuery(“将产品中的对象(o)选择为o”).getResultList();
}
这将使警告消失
另外:另一种方法是使用。警告是由以下方法引起的:
public List<Products> findAll() {
return em.createQuery("select object(o) from Products as o").getResultList();
}
public List<Products> findRange(int[] range) {
...
return q.getResultList();
}
公共列表findAll(){
返回em.createQuery(“将产品中的对象(o)选择为o”).getResultList();
}
公共列表findRange(int[]范围){
...
返回q.getResultList();
}
内部发生的是query.getResultList()
返回泛型列表
。列表中的每个对象都属于产品类型
。你们知道,但编译器不知道。只能在运行时确定类型。因此,编译器显示警告取消选中或不安全操作。您可以放心地忽略此警告
如果您真的很担心,那么可以将注释@SuppressWarnings(“unchecked”)
添加到这两个方法中,以使警告消失。将以下init方法添加到类中。web容器通过调用其init方法初始化servlet。这只发生一次,在加载servlet之后,在它开始服务请求之前。public void init()引发ServletException{并将查找对象的方法放在其中。它返回列表
而不是列表
。如果它无法编译:。非常感谢!警告消失了。我刚刚提交了我的实验室。@BeeBee u're welcome:)但请接受答案。如果你不知道这意味着什么,那么这篇帖子是为你准备的: