Chúng tôi cần đảm bảo kết quả chỉ trong vòng 30 ngày qua được trả lại cho truy vấn JPQL. Một ví dụ sau:Làm cách nào để so sánh dấu thời gian với truy vấn JPA?
Date now = new Date();
Timestamp thirtyDaysAgo = new Timestamp(now.getTime() - 86400000*30);
Query query = em.createQuery(
"SELECT msg FROM Message msg "+
"WHERE msg.targetTime < CURRENT_TIMESTAMP AND msg.targetTime > {ts, '"+thirtyDaysAgo+"'}");
List result = query.getResultList();
Đây là lỗi chúng tôi nhận được:
<openjpa-1.2.3-SNAPSHOT-r422266:907835 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: An error occurred while parsing the query filter 'SELECT msg FROM BroadcastMessage msg WHERE msg.targetTime < CURRENT_TIMESTAMP AND msg.targetTime > {ts, '2010-04-18 04:15:37.827'}'. Error message: org.apache.openjpa.kernel.jpql.TokenMgrError: Lexical error at line 1, column 217. Encountered: "{" (123), after : ""
Help!
ts là gì? Tại sao bạn có dấu ngoặc trong truy vấn của mình? {...} – Rick
Cố gắng sử dụng ký tự dấu thời gian "Cú pháp thoát JDBC" như được ghi trong các liên kết sau. Dường như đề xuất của DataNucleus là một giải pháp tốt hơn nhiều. http://openjpa.apache.org/builds/latest/docs/manual/jpa_langref.html#jpa_langref_lit http://publib.boulder.ibm.com/infocenter/cscv/v10r1/topic/com.ibm.cloudscape.doc /rrefjdbc41784.html#rrefjdbc41784 – Lightbeard
Bạn nên mở một lỗi chống lại OpenJPA để lấy mã ... hoặc doc đã được sửa. – Rick