Спящий универсальный поиск DAO - PullRequest
1 голос
/ 24 февраля 2012

Я использую универсальный дао-проект . Мне нужно найти все записи, где поле «date1» раньше, чем «date2», что-то вроде:

search.addFilterLessThan('date1', 'date2');

Однако из API видно, что поиск принимает значения только в качестве второго аргумента, а не свойства:

Date date = ...;
search.addFilterLessThan('date1', date);

Есть ли способ фильтрации по двум полям записи?

Ответы [ 2 ]

1 голос
/ 26 февраля 2012

Получил ответ от группы проекта, это сделано с помощью пользовательских фильтров:

search.addFilterCustom("{date1} < {date2}"); 
1 голос
/ 24 февраля 2012

Я предполагаю, что вы используете API критериев Hibernate.Если это так, сравнивать свойства легко:

Criteria criteria = session.createCriteria(SomeObject.class);
criteria.add(Property.forName("date1").ltProperty("date2"));
criteria.list();

Вы также можете сравнивать объединения и множество других сценариев, поддерживаемых SQL.Подобные вещи также доступны через HQL.

Обновление после просмотра проекта Diber Hibernate Generic:

Похоже, проект DAO Hibernate связывает вам руки с точки зренияфункции гибернации, ограничивающие количество возможных запросов (без предоставления критериев или запросов HQL!).Я не рассматриваю это как добавленную стоимость, даже с утверждением, что это «упрощает» ваши запросы или делает их более «надежными».

...