Hibernate 4.2.5.Final和Spring 3.2.4 - getHibernateTemplate()的替代方法.find(query,param);

时间:2013-08-22 08:47:33

标签: java spring-3 hibernate-4.x

在我们需要删除getHibernateTemplate()并使用getSessionFactory().getCurrentSession()的过程中,我们正在升级到hibernate 4.2.5.final和Spring 3.2.4。我只是想知道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风格的位置参数。

任何帮助都会受到赞赏

非常感谢提前

1 个答案:

答案 0 :(得分:0)

您可以执行类似

的操作
Query queryObject = session.createQuery(queryString);
 for (int i = 0; i < values.length; i++) {
  queryObject.setParameter(i, values[i]);
 }
}
queryObject.list();