我们可以创建一个名称相同但参数不同的HQL查询,
并使用findByNamedQueryAndNamedParam()
方法调用它。
但是这个metod的hibernate实现如下。
public List findByNamedQueryAndNamedParam(
final String queryName, final String[] paramNames, final Object[] values)
throws DataAccessException {
if (paramNames != null && values != null && paramNames.length != values.length) {
throw new IllegalArgumentException("Length of paramNames array must match length of values array");
}
return executeWithNativeSession(new HibernateCallback<List>() {
public List doInHibernate(Session session) throws HibernateException {
Query queryObject = session.getNamedQuery(queryName);
prepareQuery(queryObject);
if (values != null) {
for (int i = 0; i < values.length; i++) {
applyNamedParameterToQuery(queryObject, paramNames[i], values[i]);
}
}
return queryObject.list();
}
});
}
那么可以创建一个名称相同但参数不同的HQL查询,并根据参数动态调用查询吗?
答案 0 :(得分:1)
据我所知,您不能拥有多个具有相同名称的命名查询。您可以为此编写动态查询。检查this answer以了解如何在HQL中执行此操作。它展示了Criteria API如何使其更简单,并且对您的场景听起来更好。
此外,this answer显示了一种非常规方式来执行与您的查询类似的操作。