为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Helenr 2019-12-16 11:04:46
如何在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();有办法避免吗?
查看完整描述

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 添加类似的方法。


查看完整回答
反对 回复 2019-12-16
?
繁星coding

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();

你们都准备好了。


查看完整回答
反对 回复 2019-12-16
?
神不在的星期二

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;

}


查看完整回答
反对 回复 2019-12-16
?
慕妹3146593

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();


查看完整回答
反对 回复 2019-12-16
  • 4 回答
  • 0 关注
  • 315 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信