Как да предам интервал в 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