2011-01-26 33 views
0

我有以下Hibernate查詢 -的Hibernate查詢返回錯誤

events = (List<Event>)session.createQuery(
      "Event where eventName like " 
      + "\"" + event.getEventName() 
      + "\"" + 
      " and startingDate >= " 
      + "\"" + 
      event.getStartingDate() 
      + "\" " + 
      " and endingDate <= " 
      + "\"" + 
      event.getEndingDate() 
      + "\" " 
      ).list(); 

但它返回的錯誤 -

org.hibernate.QueryException:意外字符:「'[事件,其中eventName的像」測試「and startingDate> =」2011-01-19「and endingDate < =」2011-01-31「] at org.hibernate。org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:227) at org.hibernate。 hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:134) at org.hibernate.engine.query.HQLQueryPl一。(HQLQueryPlan.java:101) 在org.hibernate.engine.query.HQLQueryPlan。(HQLQueryPlan.java:80)

似乎在說這一點兒也不像個「的地方?

它工作得很好,直到我將日期字段添加到where子句。

謝謝

回答

2

第一:你應該使用單引號char來分隔字符串。像這樣:'string'。其次,不要通過連接字符串來構建查詢。使用參數標記,像這樣:

Event where eventName like ? and startingDate >= ? and endingDate <= ? 
Event where eventName like :name and startingDate >= :startDate and endingDate <= :endDate 

然後,從Query對象調用setParameter()方法來設置參數。您可以使用位置參數(例如,「位置0中的?是名稱」)或命名參數(「:名稱是名稱」)。請參閱Hibernate文檔中的「綁定參數」一節:http://docs.jboss.org/hibernate/core/3.5/reference/en/html_single/#objectstate-querying-executing

+0

非常感謝 – 2011-01-26 22:11:01