【问题标题】:Can we create a HQL query with same name but different Parameters?我们可以创建一个名称相同但参数不同的 HQL 查询吗?
【发布时间】:2015-07-29 06:19:51
【问题描述】:

我们能否创建一个同名但参数不同的 HQL 查询,

并使用findByNamedQueryAndNamedParam() 方法调用它。

但是这个方法的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查询,并根据参数动态调用查询?

【问题讨论】:

    标签: spring hibernate


    【解决方案1】:

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

    【讨论】:

    • @ali786 先生,不客气。你得到问题的解决方案了吗?
    • 其实我是通过写Dynamic Native Sql Query来完成的...:)
    • @ali786 很好.. 你能否将其上传为答案并接受你自己的答案.. 对其他人有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 2020-12-23
    • 2020-03-17
    • 2018-10-21
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    相关资源
    最近更新 更多