我们可以创建具有相同名称但不同参数的HQL查询吗?

时间:2015-07-29 06:19:51

标签: spring hibernate

我们可以创建一个名称相同但参数不同的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查询,并根据参数动态调用查询吗?

1 个答案:

答案 0 :(得分:1)

据我所知,您不能拥有多个具有相同名称的命名查询。您可以为此编写动态查询。检查this answer以了解如何在HQL中执行此操作。它展示了Criteria API如何使其更简单,并且对您的场景听起来更好。
此外,this answer显示了一种非常规方式来执行与您的查询类似的操作。