首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >org.hibernate.hql.ast.QuerySyntaxException:意外的标记: jpa

org.hibernate.hql.ast.QuerySyntaxException:意外的标记: jpa
EN

Stack Overflow用户
提问于 2019-04-02 14:20:09
回答 1查看 1.3K关注 0票数 0

将AND条件添加到下面提到的查询中之后

代码语言:javascript
复制
  String querys = "SELECT dr.id,dr.creation_time,dr.drawing_spec_format,dr.end_time,dr.error_type,dr.last_access_time,dr.server_name,dr.start_time,dr.supply_unit,dr.client_id,ds.request_id,ds.bb,ds.car_offset_g,ds.car_sling_type,ds.car_type,ds.ch,ds.country"
            + " FROM FlcDrawingRequests dr, FlcDrawingRequestStats ds "
            + " where dr.id=ds.request_id"
            + " AND "
            + "(dr.start_time > "
            + monthStartDate
            + ")"
            + " AND "
            + "(dr.start_time <= "
            + monthEndDate + ")";

我得到了以下异常

代码语言:javascript
复制
 java.lang.IllegalArgumentException: 
         org.hibernate.hql.ast.QuerySyntaxException: unexpected token: 00 near line 1, column 851 [SELECT dr.id,dr.creation_time,dr.drawing_spec_format,dr.end_time,dr.error_type,dr.last_access_time,dr.server_name,dr.start_time,dr.supply_unit,dr.client_id,ds.request_id,ds.bb,ds.car_offset_g,ds.car_sling_type,ds.car_type,ds.ch,ds.country FROM com.kone.kss.cad.flcws.FlcDrawingRequests dr, com.kone.kss.cad.flcws.FlcDrawingRequestStats ds  where dr.id=ds.request_id AND (dr.start_time > 2019-04-01 00:00:00) AND (dr.start_time <= 2019-4-2 23:59:59)]
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:624)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:96)

你能在这个问题上帮我一下吗?

EN

回答 1

Stack Overflow用户

发布于 2019-04-02 14:27:33

此答案假设您正在尝试执行原生查询。在任何情况下,您都应该使用预准备语句,这实际上可以解决错误的来源,这与未加引号的日期文字有关。

代码语言:javascript
复制
String sql = "SELECT dr.id, dr.creation_time, dr.drawing_spec_format, dr.end_time, dr.error_type, dr.last_access_time, dr.server_name, dr.start_time, dr.supply_unit, dr.client_id, ds.request_id, ds.bb, ds.car_offset_g, ds.car_sling_type, ds.car_type, ds.ch, ds.country ";
sql += "FROM FlcDrawingRequests dr ";
sql += "INNER JOIN FlcDrawingRequestStats ds ";
sql += "ON dr.id = ds.request_id AND ";
sql += "dr.start_time > ?1 AND ";
sql += "dr.start_time <= ?2";

Query q = em.createNativeQuery(sql);

q.setParameter(1, monthStartDate);
q.setParameter(2, monthEndDate);

请注意,我还用显式内部联接替换了您的老式隐式联接。在现代SQL中,这是编写连接的首选方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55468121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档