1

我们正在升级到 hibernate 4.2.5.final 和 Spring 3.2.4 的过程中我们需要删除getHibernateTemplate()和使用getSessionFactory().getCurrentSession(). 我只是想知道是否有替代方案getHibernateTemplate().find(query, param);?例如,项目中有很多类似以下内容:

public List<T> findByQuery(String query, Object... params) {
        return getHibernateTemplate().find(query, params);
}

public List<T> findByQuery(String query, Object param) {
        return getHibernateTemplate().find(query, param);
}

public List<T> findByQuery(String query) {
    return getHibernateTemplate().find(query);
}

调用它们的方法将类似于:

public List<GroupField> find(Group group) {
        return findByQuery("from GroupField where group = ? order by id asc", group);
    }

我可以做如下的事情:

public List<T> findByQuery(String hql, Object... params) {
        Query  query = getSessionFactory().getCurrentSession().createQuery(hql);

        if (params !=null){
            for (int i = 0; i < params.length ; i++) {
                query.setParameter (i, params[i]);
            }
        }
        return query.list();
    }

但是hibernate会抱怨Positional参数被认为已弃用;请改用命名参数或 JPA 样式的位置参数。

任何帮助将不胜感激

提前谢谢了

4

1 回答 1

0

你可以做类似的事情

Query queryObject = session.createQuery(queryString);
 for (int i = 0; i < values.length; i++) {
  queryObject.setParameter(i, values[i]);
 }
}
queryObject.list();
于 2013-08-22T08:55:04.503 回答