【Hibernate】消除Hibernate3.x中query.list()方法的Type safety警告的方法

虽说现在普遍的观点是警告不碍事,基本不管。对于Java的警告,如果有强迫症的话还可以加上@SuppressWarnings("unchecked")注释,但是你没有理由每一个方法都加上这个注释吧?

尤其在Hibernate3.x中query.list()方法,因为其返回结果就是list,因此很容易有Type safety警告。

Hibernate3.x中query.list()方法在每次数据库查询都是存在的。不可能每个涉及查询的方法都加上@SuppressWarnings("unchecked")注释。

【Hibernate】消除Hibernate3.x中query.list()方法的Type safety警告的方法_第1张图片

网络的一些文章,建议修改Eclipse的编译器,但是你的程序去到别人的程序中同样会有类似的警告。

比如如下的代码:

import java.util.List;

import org.hibernate.*;
import org.hibernate.cfg.*;
public class HibernateWarningTest {
	
	public static void main(String[] args) {
		Session session = new Configuration().configure().buildSessionFactory().openSession();
		List<Usertable> usertableList=session.createQuery("from Usertable").list();
		for(int i=0;i<usertableList.size();i++){
			Usertable usertable=usertableList.get(i);
			System.out.println(usertable.getId()+","+usertable.getUsername()+","+usertable.getPassword());
		}
		session.close();
	}

}

运行结果是:


相当于如下图,一段很简单的对表usertable查询的SQL:

【Hibernate】消除Hibernate3.x中query.list()方法的Type safety警告的方法_第2张图片

然而由于HQL的查询方法query.list()返回的是一个没有类型List,即使你前面的List表明这个list生成的是存放Usertable的List也是会如下图有一条难看的长长的黄线警告的。

【Hibernate】消除Hibernate3.x中query.list()方法的Type safety警告的方法_第3张图片

即使你把代码改成这样:

【Hibernate】消除Hibernate3.x中query.list()方法的Type safety警告的方法_第4张图片

也是没有什么卵用。

其实完全可以先把query.list()方法返回的东西,先存到一个存泛型的List<?>,之后,再读这个List的时候,再利用强制类型转换,将其转化为实体。之后再对这个实体进行操作。List<?>其实与List<Object>基本是没有区别的,但是List<?>却能够完美消除警告,List<Object>还是有警告。

import java.util.List;

import org.hibernate.*;
import org.hibernate.cfg.*;
public class HibernateWarningTest {
	
	public static void main(String[] args) {
		Session session = new Configuration().configure().buildSessionFactory().openSession();
		List<?> usertableList=session.createQuery("from Usertable").list();
		for(int i=0;i<usertableList.size();i++){
			Usertable usertable=(Usertable)usertableList.get(i);
			System.out.println(usertable.getId()+","+usertable.getUsername()+","+usertable.getPassword());
		}
		session.close();
	}

}

运行结果同样一模一样的,但在Eclipse中不会有任何警告:

【Hibernate】消除Hibernate3.x中query.list()方法的Type safety警告的方法_第5张图片

你可能感兴趣的:(eclipse,Hibernate,泛型,javaweb,警告)