java - Hibernate 模板中的泛型问题

标签 java hibernate generics jakarta-ee hql

我使用 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/

相关文章:

java - openejb 容器和 hibernate 的集成测试失败

java - 服务总线与直接数据库访问

java - 线程的客户端/服务器问题。端口已绑定(bind)

java - 如何使用chrome开发工具(F12)在Chrome浏览器中选择cssSelector值?

java - Hibernate - H2 数据库未创建

java - 使用泛型的 Collector.toMap

java - 如何编写一个接受类型 x 的数组和另一个与该数组类型相同的变量的方法

java - 为什么这个泛型代码没有运行时错误?

java - JSF 取消选择 selectOneRadio

java - 对方法的编程调用与用户通过 UI 发起的调用 - 当应用程序必须知道差异时如何处理这两者?