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

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

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

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


网络的一些文章,建议修改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:


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


即使你把代码改成这样:


也是没有什么卵用。

其实完全可以先把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中不会有任何警告:


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值