我遇到了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());
答案 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论坛中发布的以下链接