Java 如何设置Hibernate查询对象的泛型参数?

Java 如何设置Hibernate查询对象的泛型参数?,java,hibernate,Java,Hibernate,我已经创建了一个通用方法,它将采用hibernate named query,一个HashMap对象,它以以下方式包含该命名查询的参数名称值: 方法签名为: public static <T> ArrayList<T> getData(String hibernateQueryName, HashMap<?, ?> queryNameValue) throws Exce

我已经创建了一个通用方法,它将采用
hibernate named query
,一个
HashMap
对象,它以以下方式包含该命名查询的参数名称值:

方法签名为:

public static <T> ArrayList<T> getData(String hibernateQueryName, HashMap<?, ?> 
                                             queryNameValue) throws Exception;
这里
empNumber
empName
是参数名,它们分别是Integer和String类型

现在假设我还有一个SQL,它的
hibernateQueryName
是studentData:

SELECT s.s_nm    AS EMP_NAME
  FROM student s
 WHERE s.dob > :studentDOB
这里的
studentDOB
是参数名及其类型
Date
studentDOB
是我将从HashMap中获得的一个键

我想将这些参数和值设置为查询对象,如:

Query query = getSession().getNamedQuery(hibernateQueryName);
query.setXXX(parameterName, parameterValue);
上面的代码是用我的
getData
方法编写的


有许多query.setXXX方法基于
类型
,例如
query.setInteger()
,但是要调用它,我需要找到我正在传递的
getData方法的
类型。是否可以将query.setXXX方法与未知类型一起使用

尝试使用
query.setParameter(“名称”,值)
这不需要显式类型。

query.set参数的签名为

void QueryInstance.setParameter(字符串,对象)


您可以使用
HashMap
作为参数,在方法中对其进行迭代,并按照所述方法进行赋值。它将起到通用的作用。我已经这样做了,这可能对您的情况也有帮助。

我认为您可能需要重新编写您的问题以进行澄清。你是在问如何在查询中使用
getData
参数吗?@jordan我已经编辑了我的问题。如果我能澄清我的观点,请告诉我。谢谢。
的类型为
对象
在命名查询中使用之前,hibernate是否会处理该类型,因为在查询中,我们可能会有不同的类型,如Date、String、Int…?我建议尝试一下,如果遇到其他特定问题,请编辑原始问题。只要您不尝试强制转换不兼容的类型,hibernate就会处理这些类型。
Query query = getSession().getNamedQuery(hibernateQueryName);
query.setXXX(parameterName, parameterValue);