критерии Grails или hibernate для поиска только по компоненту времени

Ниже приведен мой объект домена.

Game {
    Date startDate
}

Теперь я хочу искать только те игры, которые начинаются утром в чч:мм (динамический поиск) независимо от даты. Я ищу критерии Grails примерно так

Game.where {
    startDate.timePart == timeValue
}.list()

Где timeValue = "10:30" или что-то в этом роде.

Я использую критерии Hibernate из-за некоторых пользовательских ограничений, которые не поддерживаются в GORM, поэтому было бы неплохо, если бы кто-нибудь знал, как это сделать с критериями Hibernate.

Сейчас это то, что я пытаюсь сделать в Hibernate Criteria, и это не работает (я использую postgre).

searchCriteria.add(Restrictions.sqlRestriction("to_timestamp(start_date, 'h:mm a') = ? ", timeValue, StandardBasicTypes.DATE))

Высоко ценим вашу помощь.


person manish    schedule 24.02.2014    source источник


Ответы (2)


Вы можете использовать HibernateCriteriaBuilder. Построитель можно получить с помощью динамического статического метода createCriteria() классов предметной области Grails:

   def c = Game.createCriteria()
   def results = c {
     eq("start_date",timeValue)
   }

Конструктор также может быть создан автономно с помощью экземпляра SessionFactory и постоянного класса:

  new HibernateCriteriaBuilder(clazz, sessionFactory).list {
     eq("start_date", timeValue)
  }
person Ima Miri    schedule 24.02.2014
comment
@Fahimah - Большое спасибо за ваш ответ. Если я попытаюсь использовать вашу реализацию, критерии Grails попытаются сопоставить start_date с датой. Я хочу сравнить только компонент времени. В графическом интерфейсе пользователь введет что-то вроде 10:30, и мне нужно будет перечислить все игры, которые начинаются в это время, независимо от даты. - person manish; 24.02.2014