我使用Hibernate模板,并具有以下代码:

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

我认为它看起来不错。但是,当我运行这段代码时,出现了一个错误:
[ERROR] incompatible types
[ERROR] required: java.util.List<com.model.Book>
[ERROR] found:    java.util.List<capture#1 of ?>

我该如何解决它并得到我需要的东西?先感谢您!

最佳答案

据我所知,您正在按照this example中的说明扩展HibernateDaoSupport getHibernateTemplate() 将返回没有任何类型说明的HibernateTemplate。没关系,因为HibernateTemplate没有类型参数。

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

因此,您所要做的就是将结果转换为正确的列表:

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

这将使您的List有效地为只读。这是我们为ORM便利所付出的代价。

10-08 19:41