Hibernate模板中的泛型问题

时间:2017-04-23 15:29:56

标签: java hibernate generics java-ee hql

我使用Hibernate Template并拥有以下代码:

[ERROR] incompatible types
[ERROR] required: java.util.List<com.model.Book>
[ERROR] found:    java.util.List<capture#1 of ?>

我觉得它看起来不错。但是当我运行这段代码时,我收到了一个错误:

{{1}}

我如何解决它并获得我需要的东西?提前谢谢!

1 个答案:

答案 0 :(得分:1)

据我所知,您正按this example中的说明扩展HibernateDaoSupportgetHibernateTemplate()将返回HibernateTemplate,没有任何类型规范。哪个没关系,因为HibernateTemplate没有类型参数。

所以这个find(...)方法将返回List个对象。实际的Hibernate代码可能会返回HibernateProxy实例的List。此HibernateProxy是域类的自动生成的子类,在这种情况下为Book

所以你所能做的就是将结果转换为正确的列表:

public List<? extends Book> findBooksByName(String name) {
    return (List<? extends Book>) getHibernateTemplate().find("FROM Book WHERE name = ?", name);
}

这将使您的List有效地为只读。这是我们为ORM方便支付的价格。