org.hibernate.hql.ast.QuerySyntaxException:意外标记:jpa
在向下面提到的查询添加和条件之后org.hibernate.hql.ast.QuerySyntaxException:意外标记:jpa,jpa,hibernate-jpa,Jpa,Hibernate Jpa,在向下面提到的查询添加和条件之后 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.c
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 + ")";
我得到下面的例外
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)
你能帮我解决这个问题吗 此答案假设您正在尝试执行本机查询。在任何情况下,您都应该使用一个准备好的语句,这实际上可以解决错误的来源,这与不带引号的日期文字有关
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中编写联接的首选方法。您的SQL语句不适合SQL注入!顺便说一句,您只需要引用日期就可以使该语句无误地运行。但是看看@Tim Biegeleisen的anwser,它要好得多;当我使用上面的查询获取下面的异常时:org.hibernate.hql.ast.QuerySyntaxException:unexpected token:在第1行第343列附近[选择dr.id,…您能帮我一下吗!您根本没有运行我的代码。首先,您需要告诉我们您是尝试运行原始SQL查询还是HQL查询。我正在运行原始SQL查询。类型EntityManager的方法createSQLQueryString未定义