Как передать интервал в mybatis из аннотаций?

Я использую myBatis через аннотации для получения данных с моего сервера. Пытаясь получить данные n дней назад, аннотация:

@Select("SELECT o.title from user_order o where current_date - date_trunc('day', o.dateoforder) < '#{n} days'")
ArrayList<OrderRecord> getOrderHistory(@Param("n") int n);

возвращает ошибку:

Индекс столбца вне допустимого диапазона: 1, количество столбцов: 0. Ошибка при запросе базы данных. Причина: org.postgresql.util.PSQLException: индекс столбца вне диапазона: 1, количество столбцов: 0.

Также,

@Select("SELECT o.title from user_order o where current_date - date_trunc('day', o.dateoforder) < #{n}")
ArrayList<OrderRecord> getOrderHistory(@Param("n") String n);

выдает аналогичную ошибку, когда n что-то вроде «5 дней».

Какой тип данных ожидается?

Я использую PostgreSQL.


person Manu    schedule 05.11.2012    source источник


Ответы (2)


Mybatis ожидает параметр интервала и не может автоматически преобразовать в него целое число или строку.

Необходимо передать объект типа PGInterval.

PGInterval pginterval = new PGInterval("5 days");

и аннотация должна быть:

@Select("SELECT o.title from user_order o where current_date - date_trunc('day', o.dateoforder) < #{n}")
ArrayList<OrderRecord> getOrderHistory(@Param("n") PGInterval n);
person Manu    schedule 05.11.2012

По этой ссылке вы также можете привести значение к интервалу в вашем SQL. Например, это то, что я использую в своем приложении: now() + CAST(#{my_interval} AS INTERVAL).

где «my_interval» — это строка «5 дней».

person Ben    schedule 10.10.2014