Tôi chắc chắn rằng một người quen thuộc với HQL (tôi là bản thân mình là một newbie) có thể dễ dàng trả lời câu hỏi này.Làm thế nào để truy vấn một ngày trong HQL (Hibernate) với Joda Time?
Trong ứng dụng Grails của tôi, tôi có lớp miền sau.
class Book {
org.joda.time.DateTime releaseDate //I use the PersistentDateTime for persisting via Hibernate (that use a DATETIME type for MySQL DB)
}
Trong truy vấn HQL của tôi, tôi muốn lấy cuốn sách mà ngày phát hành được bao gồm trong phạm vi date1
.. date2
Ví dụ tôi đã cố gắng:
DateTime date1, date2
...
def queryStr = "select * from Book as b where b.releaseDate > $date1 and b.releaseDate < $date2"
def res = Book.executeQuery(queryStr)
Nhưng tôi có những ngoại lệ ...caused by: org.springframework.orm.hibernate3.HibernateQueryException: unexpected token:
Mã thông báo lỗi trỏ đến định dạng ngày (ví dụ: 2009-11-27T21:57:18.010+01:00
hoặc Fri Nov 27 22:01:20 CET 2009
)
Tôi cũng đã cố chuyển đổi date1 thành một lớp Ngày không thành công
Vì vậy, mã HQL chính xác là gì? Tôi có nên chuyển đổi sang một định dạng cụ thể (cái nào?) Bằng cách sử dụng phương thức patternForStyle hoặc có cách nào khác để làm điều đó không?
Xin cảm ơn,
Fabien.
Bản đồ org.joda.time.DateTime vào SQL của bạn như thế nào? Có phải nó trực tiếp đến lĩnh vực này? java.util.Date và java.util.Calendar có thể ánh xạ trực tiếp đến một trường cơ sở dữ liệu. Đối với những gì nó có giá trị, vì DateTime là một đối tượng tổng hợp, plugin Grails có thể sử dụng dưới dạng bao trùm một kiểu ánh xạ tùy chỉnh (xem giây 5.3 của Java Persistence with Hibernate). – Alan
Như đã nêu trong nhận xét của mã, DateTime đang sử dụng loại ánh xạ PersistentDateTime tùy chỉnh từ thư viện joda-time-hibernate – fabien7474