用LIMIT和MySQL订购

时间:2013-12-20 13:20:47

标签: java mysql sql jpql

我遇到了MySQL查询的问题,我在这里获得了一行LIMIT 1.但是当它与订单一起使用时它不起作用。

在mysql工作台中使用的查询如下:

select * from train t 
where t.togId = 1125 
and t.tilDato >= '2013-12-20' 
order by t.fraDato LIMIT 1; 

然而,当我通过javacode和我的服务器运行时,我得到了这个堆栈跟踪:

Exception Description: 
Syntax error parsing [select t from train t where t.togId = :togId 
and t.tilDato >= :todaysdate order by t.fraDato LIMIT 1].

[102, 103] The ORDER BY clause has 't.fraDato ' and 'LIMIT ' 
that are not separated by a comma.

[108, 109] The ORDER BY clause has 'LIMIT ' and '1' that are not separated by a comma.

查询创建如下:

Query query = em.createQuery("select t from train t where t.togId = :togId" +
    " and t.tilDato >= :todaysdate order by t.fraDato LIMIT 1")
    .setParameter("togId", togId)
    .setParameter("todaysdate", new Date());

2 个答案:

答案 0 :(得分:3)

您似乎正在使用JPQL,即Java持久性查询语言。 MySQL和JPQL(或Hibernate)是完全不同的查询语言,每个查询语言都有自己特定的语法。 LIMIT构造仅在MySQL中可用,并且它不是任何SQL标准的一部分。通过在query对象上设置最大结果数来模拟JPA中的功能。

因此,您应该使用

代替LIMIT 1
query.setMaxResults(1);

答案 1 :(得分:1)

使用query.setMaxResults()代替Limit将无法使用hql

Query q = session.createQuery("FROM table");
q.setFirstResult(start);
q.setMaxResults(maxRows);

请参阅hibernate论坛中发布的以下链接

https://forum.hibernate.org/viewtopic.php?f=9&t=939314