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);