当前位置: 首页 > 面试题库 >

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

沈巴英
2023-03-14
问题内容

例如我有这样的查询:

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

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

Type safety: The expression of type List needs unchecked convershtml" target="_blank">ion to conform to List<Cat>


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

有办法避免吗?


问题答案:

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


 类似资料:
  • 问题内容: 使用createQuery()。list之后是否可以避免投射警告? 我希望找到一种通过通用参数或方法参数指定目标对象的方法,如下所示: 问题答案: 要记住的最重要的一点是, 警告是由于编译器引起的,而不是hibernate的 -您可以告诉编译器忽略未实现的泛型。通过使用HQL,我们以一种类型安全的方式查询数据,不幸的是,java无法进行验证。 有很多方法可以避开hibernate转换的

  • 问题内容: 我将UNLINK与和一起使用。我知道这种方式非常危险,因为每个人都可以删除任何文件。但是我需要使用,因为删除文件时无法重新加载页面。 那么,我该如何做才能只允许拥有该文件的用户删除该文件? 如果您认为我在这里做错了什么,或者您有其他想法,并且认为这将是有用的,也请让我知道其他事情:) 我的PHP代码: 我的AJAX代码: 问题答案: 您需要以某种方式对用户进行身份验证。 您的用户需要使

  • 创建表(int(10)不为空AUTO_INCREMENT,int(30),varchar(30),varchar(4)不为空,int(2)不为空,主键()); 创建表(varchar(10),主键()); 创建表(int(10),int(30),varchar(30),varchar(4),int(2), varchar(10), varchar(2)not null默认'p'); 分隔符$$ 为

  • 钱箱类: 商户类: 输入数据: 我的任务 计算每个商家的总金额并返回商家列表 我正在尝试使用Stream API解决这个任务。并编写了以下代码: 结果 但显然,流返回四个对象,而不是所需的两个对象。我意识到,地图(第二行)为每个cashBoxId创建了四个对象。而且我不知道如何通过进行过滤,也不知道如何获得没有重复的结果。

  • 问题内容: 我有一些数据存储在Java元素中,我需要以给定的格式JSONObject返回它。虽然我的实现工作正常,但是我仍然从eclipse收到警告消息(版本:Juno Service Release 2): “ 类型安全性:put(Object,Object)方法属于原始类型HashMap。对通用类型HashMap的引用应参数化 ” 这是我的代码: 有问题的行是: 除了添加之外,还有其他方法可以

  • 我正在使用phpMyAdmin进行grendalhosting。不管我做什么,我总是会犯这些错误。我是PHP/MySQL新手。 警告:mysql_connect():用户“root@”10.1的访问被拒绝。在/home/u438954871/public_html/url shortner/connect中输入2.21“(使用密码:否)。php第8行 警告:mysql_select_db():在/