gpt4 book ai didi

java - 使用 HibernateTemplate 的 findByNamedParam 函数进行分页

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:01:53 30 4
gpt4 key购买 nike

我见过很多关于如何使用一些非常简单的查询创建分页的示例。但我没有看到任何使用 HibernateTemplate 的 findByNamedParam 方法。

如何在使用 findByNamedParam 方法的同时设置查询的 firstResult 和 maxResult 参数?

基本上,我正在尝试将分页添加到我通过 HibernateTemplate 的 findByNamedParam 方法创建的 hql 查询。

最佳答案

好吧,经过大量的研究,我终于得到了我想要的。

首先,需要创建一个 HibernateCallback 实现:

HibernateCallbackImpl.java:

import java.sql.SQLException;
import java.util.List;

import org.apache.poi.hssf.record.formula.functions.T;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;

public class HibernateCallbackImpl
implements HibernateCallback<List<T>> {

private String queryString;
private String[] paramNames;
private Object[] values;

private int firstResult;
private int maxResults;

/**
* Fetches a {@link List} of entities from the database using pagination.
* Execute HQL query, binding a number of values to ":" named parameters in the query string.
*
* @param queryString a query expressed in Hibernate's query language
* @param paramNames the names of the parameters
* @param values the values of the parameters
* @param firstResult a row number, numbered from 0
* @param maxResults the maximum number of rows
*/
public HibernateCallbackImpl(
String queryString,
String[] paramNames,
Object[] values,
int firstResult,
int maxResults) {
this.queryString = queryString;
this.paramNames = paramNames;
this.values = values;

this.firstResult = firstResult;
this.maxResults = maxResults;
}

@Override
public List<T> doInHibernate(Session session) throws HibernateException,
SQLException {
Query query = session.createQuery(queryString);
query.setFirstResult(firstResult);
query.setMaxResults(maxResults);

// TODO: throw proper exception when paramNames.length != values.length

for (int c=0; c<paramNames.length; c++) {
query.setParameter(paramNames[c], values[c]);
}

@SuppressWarnings("unchecked")
List<T> result = query.list();

return result;
}

}

然后,我可以实例化新对象,它会返回我想要的:

例子:

@SuppressWarnings("unchecked")
List<TitleProductAccountApproval> tpaas =
getHibernateTemplate().executeFind(
new HibernateCallbackImpl(
hql.toString(),
paramNames.toArray(new String[paramNames.size()]),
values.toArray(),
firstResult,
maxResult
)
);

关于java - 使用 HibernateTemplate 的 findByNamedParam 函数进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5112228/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com