我相信有人熟悉HQL(我自己是新手)很容易回答這個問題。如何用Joda時間在HQL(休眠)中查詢日期?
在我的Grails應用程序中,我有以下的域類。
class Book {
org.joda.time.DateTime releaseDate //I use the PersistentDateTime for persisting via Hibernate (that use a DATETIME type for MySQL DB)
}
在我的HQL查詢,我想要檢索書籍的發行日期被包含在範圍date1
.. date2
比如我想:
DateTime date1, date2
...
def queryStr = "select * from Book as b where b.releaseDate > $date1 and b.releaseDate < $date2"
def res = Book.executeQuery(queryStr)
但我得到異常...caused by: org.springframework.orm.hibernate3.HibernateQueryException: unexpected token:
錯誤標誌指向日期格式(例如2009-11-27T21:57:18.010+01:00
或Fri Nov 27 22:01:20 CET 2009
)
我也嘗試將date1轉換成Date類沒有成功
那麼什麼是正確的HQL代碼?我應該使用patternForStyle方法轉換爲特定的格式(哪一個?),還是有另一種更清晰的方法來完成它?
謝謝,
Fabien。
org.joda.time.DateTime如何映射到您的SQL?它是直接到現場嗎? java.util.Date和java.util.Calendar可以直接映射到數據庫字段。由於DateTime是一個聚合對象,因此它的價值在於,Grails插件可能在封面下使用了自定義映射類型(請參閱Java Persistence with Hibernate的第5.3節)。 – Alan 2009-12-04 22:08:03
如代碼註釋中所述,DateTime使用來自joda-time-hibernate庫的PersistentDateTime自定義映射類型 – fabien7474 2009-12-04 22:34:00