我创建了一个通用方法,该方法将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
此处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方法基于Type
,例如query.setInteger()
但是为了调用它,我需要找到?
的类型getData
}} 方法。是否可以使用未知类型?
答案 0 :(得分:1)
尝试使用query.setParameter("name", value)
这不期望显式类型。
答案 1 :(得分:1)
query.set参数的签名是
void QueryInstance.setParameter(String, Object);
您可以使用HashMap<String,Object>
作为参数,在方法中进行迭代并按照上述方法进行分配。它将充当通用。我已经通用了这种方式,它也可以帮助你。