4 回答
TA贡献2019条经验 获得超9个赞
@SuppressWarnings如建议的那样,在任何地方使用都是一种不错的方法,尽管每次调用都会涉及一些手指输入q.list()。
我建议使用其他两种技术:
写一个演员助手
只需将所有内容重构@SuppressWarnings到一个位置:
List<Cat> cats = MyHibernateUtils.listAndCast(q);
...
public static <T> List<T> listAndCast(Query q) {
@SuppressWarnings("unchecked")
List list = q.list();
return list;
}
防止Eclipse为不可避免的问题生成警告
在Eclipse中,转到“窗口”>“首选项”>“ Java”>“编译器”>“错误/警告”,然后在“通用类型”下,选中复选框 Ignore unavoidable generic type problems due to raw APIs
对于类似的问题,这将关闭不必要的警告,这是不可避免的。
一些评论:
我选择传递Query而不是结果,q.list()因为那样,这种“欺骗”方法只能用于用Hibernate进行欺骗,而不能用于List一般的欺骗。
您可以为.iterate()etc 添加类似的方法。
TA贡献1797条经验 获得超4个赞
提出问题已有很长时间了,但我希望我的回答可能对像我这样的人有所帮助。
如果您看一下javax.persistence api docs,将会发现从那时起已经在其中添加了一些新方法Java Persistence 2.0。其中之一就是createQuery(String, Class<T>)回报TypedQuery<T>。您可以像使用TypedQuery它一样使用,只是Query所有操作现在都是类型安全的,差别很小。
因此,只需将代码更改为如下所示:
Query q = sess.createQuery("from Cat cat", Cat.class);
List<Cat> cats = q.list();
你们都准备好了。
TA贡献1963条经验 获得超6个赞
我们也使用@SuppressWarnings("unchecked")它,但是我们经常尝试仅在变量的声明中使用它,而不是在整个方法中使用它:
public List<Cat> findAll() {
Query q = sess.createQuery("from Cat cat");
@SuppressWarnings("unchecked")
List<Cat> cats = q.list();
return cats;
}
TA贡献1820条经验 获得超9个赞
尝试使用TypedQuery代替Query。例如,代替此:
Query q = sess.createQuery("from Cat cat", Cat.class);
List<Cat> cats = q.list();
用这个:-
TypedQuery<Cat> q1 = sess.createQuery("from Cat cat", Cat.class);
List<Cat> cats = q1.list();
添加回答
举报