2013-08-30 87 views
0

我很喜歡這個問題。請幫忙。Cayenne SQLTemplate返回不正確的結果

sql = "SELECT * FROM scheduler_assignment a WHERE a.start < #bind($end)"; 
SQLTemplate query = new SQLTemplate(Assignment.class, sql); 
query.setFetchingDataRows(true); 
Map<String, Object> params = new HashMap<String, Object>(); 
params.put("end", end); 
query.setParameters(params); 
ObjectContext context = BaseContext.getThreadObjectContext(); 
List<DataRow> rows = context.performQuery(query); 

end是Date對象。當我將end更改爲等效字符串時,查詢正常工作。有誰知道爲什麼傳入Date對象不能用於綁定指令?謝謝!

回答

1

第一種可能性:'scheduler_assignment.start'列不是數據庫中的日期。它可能是一個VARCHAR或其他東西。

如果不是這種情況,您可能必須在Cayenne的#bind指令中傳遞參數類型以使用正確的驅動程序方法。例如:

#bind($end 'TIMESTAMP') 
+0

謝謝你看我的問題。我驗證了scheduler_assignment.start是MySQL數據庫中的DATETIME數據類型。我把你的例子的類型的參數,但我仍然得到錯誤的結果。這是執行的SQL的日誌。當我從MySQL Workbench運行查詢時,我收到一行。當我使用上面的代碼運行相同的查詢時,我得到零行。 'SELECT * FROM scheduler_assignment a WHERE a.start <? [bind:1:'2013-08-31 23:00:00']' – Tuan

+0

它可以轉換到不同的時區嗎? – Tuan

+0

http://objectstyle.org/cayenne/lists/cayenne-user/2007/08/0027.html – Tuan