如何在Hibernate HQL结果中避免类型安全警告?

如何在Hibernate HQL结果中避免类型安全警告?

例如我有这样的查询:


Query q = sess.createQuery("from Cat cat");

List cats = q.list();

如果我尝试做这样的事情,它将显示以下警告


Type safety: The expression of type List needs unchecked conversion to conform to List<Cat>



List<Cat> cats = q.list();

有办法避免吗?


Helenr
浏览 316回答 4
4回答

慕少森

@SuppressWarnings如建议的那样,在任何地方使用都是一种不错的方法,尽管每次调用都会涉及一些手指输入q.list()。我建议使用其他两种技术:写一个演员助手只需将所有内容重构@SuppressWarnings到一个位置:List<Cat> cats = MyHibernateUtils.listAndCast(q);...public static <T> List<T> listAndCast(Query q) {&nbsp; &nbsp; @SuppressWarnings("unchecked")&nbsp; &nbsp; List list = q.list();&nbsp; &nbsp; return list;}防止Eclipse为不可避免的问题生成警告在Eclipse中,转到“窗口”>“首选项”>“ Java”>“编译器”>“错误/警告”,然后在“通用类型”下,选中复选框 Ignore unavoidable generic type problems due to raw APIs对于类似的问题,这将关闭不必要的警告,这是不可避免的。一些评论:我选择传递Query而不是结果,q.list()因为那样,这种“欺骗”方法只能用于用Hibernate进行欺骗,而不能用于List一般的欺骗。您可以为.iterate()etc 添加类似的方法。

繁星coding

提出问题已有很长时间了,但我希望我的回答可能对像我这样的人有所帮助。如果您看一下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();你们都准备好了。

神不在的星期二

我们也使用@SuppressWarnings("unchecked")它,但是我们经常尝试仅在变量的声明中使用它,而不是在整个方法中使用它:public List<Cat> findAll() {&nbsp; &nbsp; Query q = sess.createQuery("from Cat cat");&nbsp; &nbsp; @SuppressWarnings("unchecked")&nbsp; &nbsp; List<Cat> cats = q.list();&nbsp; &nbsp; return cats;}

慕妹3146593

尝试使用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();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java