2008-09-19 52 views
5

Tôi đã có một ứng dụng sử dụng kết hợp hibernate (chú thích)/mysql cho ORM. Trong ứng dụng đó, tôi có một thực thể với trường Date. Tôi đang tìm một cách để chọn vào ngày đó trong một khoảng thời gian (vì vậy hh: mm: ss không có phần ngày tháng).So sánh phần thời gian của trường datetime trong Hibernate

Trong MySQL có hàm TIME (biểu thức) có thể trích xuất phần thời gian và sử dụng nó trong mệnh đề where, nhưng điều đó dường như không có sẵn trong Hibernate mà không chuyển sang truy vấn gốc. Có một lựa chọn trong hibernate để làm điều này, hoặc tôi nên lặp qua các kết quả trong java và làm so sánh ở đó? Điều này sẽ chậm hơn nhiều so với giải pháp MySQL, vì điều đó sẽ không sử dụng các chỉ mục?

Trả lời

4

Các chức năng sau có sẵn trong HQL, có lẽ bạn có thể sử dụng chúng:

second(...), minute(...), hour(...), day(...), month(...), year(...)

1

Thêm các biểu hiện như một hạn chế SQL thay vì phải truy vấn nguồn gốc đầy đủ. Tôi không biết MySQL cụ thể, nhưng hãy tưởng tượng một cái gì đó như thế này:

Criteria criteria = session.createCriteria(MyTable.class); 
criteria.add( 
    Expression.sql(
    "TIME({alias}.my_date, 'hh:mm:ss') >= :1", 
    dateRangeMin, 
    new StringType() 
) 
); 
+0

Tài liệu nêu rõ biểu thức 'bán không được dùng' và sử dụng Restrictions.sqlRestriction(). –

+0

Cảm ơn bạn đã trưởng thành! Chúng tôi vẫn đang chuyển từ Hibernate 2 sang Hibernate 3 trong tổ chức của chúng tôi. Tôi chắc chắn sẽ kiểm tra điều đó. –

Các vấn đề liên quan