2013-08-30 5 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 не будет работать для директивы bind? Спасибо!

ответ

1

Первая возможность: столбец «scheduler_assignment.start» не является датой в базе данных. Это может быть VARCHAR или что-то в этом роде.

Если это не так, вам может потребоваться передать тип аргумента в директиве #bind для Cayenne, чтобы использовать правильный метод драйвера. Например:

#bind($end 'TIMESTAMP') 
+0

Спасибо, что посмотрели на мой вопрос. Я проверил, что scheduler_assignment.start является типом данных DATETIME в базе данных MySQL. Я поместил тип аргумента, как ваш пример, но я все еще получаю неправильный результат. Вот журнал выполненного SQL. Когда я запускаю запрос из MySQL Workbench, я получаю одну строку. Когда я запускаю тот же запрос, используя вышеприведенный код, я получаю нулевую строку. 'SELECT * FROM scheduler_assignment a WHERE a.start Tuan

+0

Не может ли он превратиться в другой часовой пояс где-нибудь? – Tuan

+0

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

Смежные вопросы