如何将泛型参数设置为Hibernate的Query对象?

时间:2014-04-09 12:38:42

标签: java hibernate

我创建了一个通用方法,该方法将hibernate named query HashMap对象,其中包含该命名查询的参数名称值,方法如下:

方法签名是:

public static <T> ArrayList<T> getData(String hibernateQueryName, HashMap<?, ?> 
                                             queryNameValue) throws Exception;

现在假设我有一个SQL,其hibernateQueryName是empData:

SELECT e.emp_nm      AS EMP_NAME
     , e.emp_address AS EMP_ADDR
  FROM employee e
 WHERE e.emp_no > :empNumber
   AND e.name LIKE :empName

此处empNumberempName是参数名称,它们的类型分别为Integer和String。

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

SELECT s.s_nm    AS EMP_NAME
  FROM student s
 WHERE s.dob > :studentDOB

此处studentDOB是参数名称及其类型DatestudentDOB是我从HashMap获得的关键。

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

Query query = getSession().getNamedQuery(hibernateQueryName);
query.setXXX(parameterName, parameterValue);

上面的代码是用我的getData方法编写的。

有许多query.setXXX方法基于Type,例如query.setInteger()但是为了调用它,我需要找到?的类型getData }} 方法。是否可以使用未知类型?

的query.setXXX方法

2 个答案:

答案 0 :(得分:1)

尝试使用query.setParameter("name", value)这不期望显式类型。

答案 1 :(得分:1)

query.set参数的签名是

void QueryInstance.setParameter(String, Object);

您可以使用HashMap<String,Object>作为参数,在方法中进行迭代并按照上述方法进行分配。它将充当通用。我已经通用了这种方式,它也可以帮助你。