我是Hibernate的新手,我正在写一个简单的方法来返回与特定过滤器匹配的对象列表。List<Foo>
似乎是自然的回报类型。
不管我做什么,除非雇用了ugly,否则似乎都无法使编译器满意@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
返回ajava.util.List
作为原始类型。我发现最近的Hibernate(4.0.x)无法实现参数化类型很奇怪,因此我怀疑是我自己在做错事情。
它看起来非常像将Hibernate结果转换为对象列表,但是在这里我没有“硬”错误(系统知道类型为Foo,并且我没有使用SQLQuery,而是使用了直接查询)。所以没有喜悦。
我也看过Hibernate Class Cast Exception,因为它看起来很有希望,但是后来我意识到我实际上并没有得到任何信息Exception
……我的问题只是一个警告的问题-如果可以的话,是一种编码样式。
关于jboss.org的文档,Hibernate手册和一些教程似乎没有如此详细地涵盖该主题(或者我没有在正确的位置搜索?)。当他们确实进入细节时,他们会使用即时转换-以及不在jboss.org官方网站上的教程中使用的转换,因此我有些警惕。
代码一旦编译,就不会出现明显的问题……我知道……。结果是预期的。
所以:我这样做对吗?我是否缺少明显的东西?有“正式”或“推荐”的方式吗?