我使用 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 ?>
我怎样才能修复它并得到我需要的东西?提前致谢!
最佳答案
据我所知,您正在扩展 HibernateDaoSupport
,如 this example 中所述。 . 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 便利性付出的代价。
关于java - Hibernate 模板中的泛型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43573036/