我是一个使用 Hibernate 的新手,我正在编写一个返回对象列表的简单方法
匹配一个特定的过滤器。 List<Foo>
似乎是一个自然的返回类型。
无论我做什么,似乎都不能让编译器满意,除非我使用一个丑陋的 @SuppressWarnings
。
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
public class Foo {
public Session acquireSession() {
// All DB opening, connection etc. removed,
// since the problem is in compilation, not at runtime.
return null;
}
@SuppressWarnings("unchecked") /* <----- */
public List<Foo> activeObjects() {
Session s = acquireSession();
Query q = s.createQuery("from foo where active");
return (List<Foo>) q.list();
}
}
我想摆脱那个 SuppressWarnings
。但是如果我这样做,我会得到警告
Warning: Unchecked cast from List to List<Foo>
(我可以忽略它,但首先我不想得到它) ,如果我删除泛型以符合 .list()
返回类型,我会得到警告
Warning: List is a raw type. References to generic type List<E>
should be parameterized.
我注意到,org.hibernate.mapping
是的声明了一个 List
; 但它是一个完全不同的类型-Query
返回一个 java.util.List
,作为一个原始类型。我觉得最近的 Hibernate (4.0.x)没有实现参数化类型很奇怪,所以我怀疑是我做错了什么。
它看起来非常像 将 Hibernate 结果强制转换为对象列表,但是这里没有“硬”错误(系统知道 Foo 类型,我使用的不是 SQLQuery,而是直接查询)。所以没有乐趣。
我也看了看 Hibernate 类强制转换异常,因为它看起来很有希望,但后来我意识到,我做 没有实际上得到任何 Exception
... 我的问题只是一个警告-一种编码风格,如果你愿意。
Documentation on jboss.org, Hibernate manuals and several tutorials do not seem to cover the topic in 这样 detail (or I didn't search in the right places?). When they do enter into detail, they use on-the-fly casting - and this on tutorials that weren't on the official jboss.org site, so I'm a bit wary.
代码,一旦编译,运行没有 很明显问题... ... 据我所知... ... 还没有; 结果是预期的。
那么: 我这样做对吗? 我是不是漏掉了什么明显的东西? 有没有一个“正式”的 还是“推荐”就是这样?