2009-02-04 38 views
24

Tôi đang cố gắng để viết truy vấn này sử dụng Hibernate 3 và Oracle 10.Làm cách nào để sử dụng ngày hiện tại trong truy vấn HQL với cơ sở dữ liệu Oracle?

from Alert alert 
where alert.expiration > current_date() 
order by alert.priority, alert.updated, alert.name 

Nó tạo SQL như thế này -

Hibernate: select alert0_.ANNOUNCEMENTS_ID as ANNOUNCE1_1_, alert0_.ANNOUNCEMENT 
S_NAME as ANNOUNCE2_1_, alert0_.ANNOUNCEMENTS_PRIORITY as ANNOUNCE3_1_, alert0_. 
ANNOUNCEMENTS_EXPIRATION as ANNOUNCE4_1_, alert0_.ANNOUNCEMENTS_UPDATE_DATE as A 
NNOUNCE5_1_ from NYC311_ANNOUNCEMENTS alert0_ where (alert0_.ANNOUNCEMENTS_EXPIR 
ATION>current_date()) order by alert0_.ANNOUNCEMENTS_PRIORITY , alert0_.ANNOUNC 
EMENTS_UPDATE_DATE , alert0_.ANNOUNCEMENTS_NAME 

tôi nhận được tất cả các lỗi lập dị như "mất tích ngay ngoặc đơn "khi có dấu ngoặc đơn hoàn toàn cân bằng.

Tại sao Oracle lại lo ngại về điều này? Có cách nào tốt hơn để viết truy vấn HQL của tôi?

Trả lời

36

nên không đó là current_date?

Hibernate sẽ dịch nó sang phương ngữ thích hợp.

Tôi không tìm thấy một tài liệu tham khảo "Hibernate sẽ dịch thành tài liệu tham khảo", nhưng biểu thức nói chung có thể được tìm thấy trong HQL Expressions for Hibernate 4.3.

Sau đó, có thông số Java Persistence API 2.0 (JPA) xác định các biểu thức cho ngôn ngữ truy vấn Java Persistence (JPQL) và ý nghĩa của chúng, ví dụ: cho current_date:

4.6.17.2.3 Chức năng thời gian chức năng_returning_datetime: = CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP Các hàm ngày giờ trả về giá trị ngày, giờ và dấu thời gian hiện tại trên máy chủ cơ sở dữ liệu .

4

current_date() một chức năng Hibernate?

Tôi sẽ sử dụng sysdate để thay thế. như thế này:

where alert.expiration > sysdate 

Hoặc để bỏ qua thời gian trong ngày:

where alert.expiration > trunc(sysdate) 
+1

Current_date và Current_timestamp là các hàm Oracle. Current_date = Sysdate nhưng Oracle không cần() sau một cuộc gọi hàm. –

+7

CURRENT_DATE(), CURRENT_TIME(), CURRENT_TIMESTAMP() cũng là Hibernate HQL Functions. ("Java Persistence With Hibernate") –

+0

chỉ cần vượt qua CURRENT_DATE() trong truy vấn của bạn như ví dụ: "và date = CURRENT_DATE()"; –

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