【问题标题】:how to write order by and limit query in jpa [duplicate]如何在jpa中编写order by和limit查询[重复]
【发布时间】:2012-05-30 07:51:40
【问题描述】:

可能重复:
Select top 1 result using JPA

我希望根据我的表“MasterScrip”的“totalTradedVolume”字段获取前 10 个结果 当我编写以下查询时:

Collection<MasterScrip> sm=null;
   sm=em.createQuery("select m from MasterScrip m where m.type = :type order by m.totalTradedVolume limit 2").setParameter("type", type).getResultList();

我得到以下异常:

Caused by: java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: 
Exception Description: Syntax error parsing the query [select m from MasterScrip m where m.type = :type order by m.totalTradedVolume limit 2], line 1, column 78: unexpected token [limit].
Internal Exception: NoViableAltException(80@[])

我的 jpa 查询有问题。谁能纠正我?

【问题讨论】:

  • 查看我对类似问题的回答stackoverflow.com/questions/6708085/…
  • 它并不是真正的重复。类似的问题检索任意结果,这个问题是关于获取 m.totalTradedVolume 值最高的结果。

标签: java jpa persistence


【解决方案1】:

limit 在 JPA 中无法识别。您可以改用query.setMaxResults 方法:

sm = em.createQuery("select m from MasterScrip m where m.type = :type 
        order by m.totalTradedVolume")
    .setParameter("type", type)
    .setMaxResults(2).getResultList()

【讨论】:

  • 为什么“限制”这个词不起作用?
  • @KorayTugay,我知道现在回答你的问题为时已晚,但为了让其他人受益,limit 特定于某些数据库(mysql),但HQL 的目标是与所有休眠模式一起工作支持的数据库。
【解决方案2】:

您可以使用Query setFirstResult and setMaxResult 方法解决

【讨论】:

    猜你喜欢
    • 2014-01-17
    • 1970-01-01
    • 2011-11-20
    • 2011-06-10
    • 2020-12-17
    • 2020-11-19
    • 1970-01-01
    相关资源
    最近更新 更多