Hibernate是不是支持MySql中的limit语句?
Posted
技术标签:
【中文标题】Hibernate是不是支持MySql中的limit语句?【英文标题】:Does Hibernate support the limit statement in MySql?Hibernate是否支持MySql中的limit语句? 【发布时间】:2010-12-20 14:14:15 【问题描述】:我正在开发一个使用 Java、mysql、Struts2 MVC 和 Hibernate 的项目。我尝试在 hql 查询中使用 limit 语句,但它不能正常工作。
Select t from table1 t where t.column1 = :someVal limit 0,5
编辑:我将其用作 namedQuery 并使用 JPA 模板调用此 namedQuery
这在 MySql 中可以正常工作,但是当我将其作为 hql 查询运行时,它会返回所有记录,而不考虑限制语句。有没有人遇到同样的问题??任何帮助表示赞赏!
问候,RDJ
【问题讨论】:
【参考方案1】:使用休眠功能进行分页! setFirstResult(), setMaxResults()
http://www.javalobby.org/java/forums/t63849.html
【讨论】:
【参考方案2】:使用Query.setMaxResults(..)
【讨论】:
我正在使用 NamedQuery 。函数 setFirstResult() 和 setMaxResults() 可以与 namedQuery 一起使用吗?? 你为什么不尝试阅读javadoc,或者在你的IDE中打开自动完成功能看看?【参考方案3】:我认为, 如果我们使用 Criteria 我们可以指定
Crietria c=session.createCriteria(Emp.class); c.setFirstResult(0); c.setMaxResult(5); 列表 list=c.list();
这里 0 和 5 作为限制 0,5
来源:http://www.javatpoint.com/hcql
【讨论】:
【参考方案4】: List<Employee> dataList = null;
Query hQuery = null;
try
// Getting Session
hSession = HibernateSessionFactory.getSession();
hTransaction = hSession.beginTransaction();
hQuery = hSession.getNamedQuery(query);
Iterator<Object> hIterator = paramMap.entrySet().iterator();
while (hIterator.hasNext())
Map.Entry<String, Object> paramPair = (Map.Entry<String,Object>) hIterator.next();
hQuery.setParameter(paramPair.getKey(), paramPair.getValue());
hQuery.setFirstResult(1);
hQuery.setMaxResults(100);
System.out.println(hQuery);
dataList = hQuery.list();
hTransaction.commit();
catch (Exception e)
hTransaction.rollback();
finally
try
hSession.flush();
HibernateSessionFactory.closeSession();
catch (Exception hExp)
【讨论】:
这只是一堆代码。关于这如何帮助 OP 的具体问题的一些解释会很好 你可以在Query
接口中找到两个方法setFirstResult(),setMaxResults()
,这有助于在分页中获取记录..以上是关于Hibernate是不是支持MySql中的limit语句?的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate 5 中的 NativeQuery 调用是不是仍支持 HQL?