HQL (hibernate) соответствие диапазона меток времени - PullRequest
1 голос
/ 19 мая 2010

Мне нужно написать запрос, чтобы получить объект в промежутке времени, в настоящее время запрос выглядит так:

Timestamp from = ... 
Timestamp to = ...

getHibernateTemplate().find("from " + Person.class.getName() + " ml where ml.lastModifiedOn>="+from.toString()+" and m1.lastModifiedOn<=" + to.toString());

Однако это не работает по понятным причинам. Как мне отформатировать отметку времени, чтобы она была приемлемой для запроса.

org.springframework.orm.hibernate3.HibernateQueryException: неожиданный токен: 16 рядом со строкой 1, столбец 123 [от Person ml, где ml.lastModifiedOn> = 2010-02-12 16: 00: 21.292 и m1.lastModifiedOn

Ответы [ 4 ]

3 голосов
/ 19 мая 2010

В вашем текущем запросе отсутствуют одинарные кавычки. Должно работать следующее:

from Person ml where ml.lastModifiedOn 
between '2010-02-12 16:00:21.292' and '2010-02-12 23:00:21.292' 

Обратите внимание, что я не знаю, почему вы не передаете Date экземпляров в следующий запрос:

from Person ml where ml.lastModifiedOn between :from and :to 

Вы используете java.sql.Timestamp здесь? Если да, то не стоит.

2 голосов
/ 19 мая 2010

Вы можете просто передать long (from.getTime()) в сравнении, если оно представлено как длинное в БД.

В противном случае вы можете использовать эти функции: second(...), minute(...), hour(...), day(...), month(...), and year(...)

1 голос
/ 19 мая 2010

Как насчет этого?

    String sql = "from " + Person.class.getName() + " ml where ml.lastModifiedOn>= ? and m1.lastModifiedOn<= ?";
    Date from = ...;
    Date to = ...;

    getHibernateTemplate().find(sql, new Object[] {from,to});
0 голосов
/ 19 мая 2010

Если вы хотите запросить что-то между, вы можете сделать следующее:

 public List findPerson() {
   Date from = ...;
   Date to = ...;
   return entityManager.createQuery(
     "SELECT p from Person p WHERE p.lastModifiedOn BETWEEN ?1 AND ?2")
     .setParameter(1,from, TemporalType.DATE)
     .setParameter(2,to, TemporalType.DATE).getResultList();
}

Возможно, вам придется изменить TemporalType.DATE на то, что вы используете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...