我使用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便利所付出的代价。