Элегантный способ реализовать поисковую страницу на основе критериев в Hibernate - PullRequest
1 голос
/ 08 октября 2010

Используя Hibernate, как бы вы разработали и внедрили страницу критериев поиска (которая имеет несколько редактируемых / выбираемых полей / раскрывающихся списков в качестве критериев поиска), чтобы запросы не загромождали код доступа к данным.Я имею в виду отсутствие конкатенации строк запросов, основанной на условных выражениях, и в конечном итоге все запросы должны идти в отдельном XML-файле.Я сделал такую ​​реализацию, используя динамические запросы IBatis.Не удалось найти такую ​​вещь в Hibernate, поэтому я подумал, что было бы элегантным способом реализации динамической страницы на основе критериев в Hibernate.

Ответы [ 3 ]

4 голосов
/ 09 октября 2010

Похоже, что вы ищете, неудивительно, что Criteria API:

http://docs.jboss.org/hibernate/core/3.5/reference/en/html/querycriteria.html

2 голосов
/ 20 октября 2010

Поскольку у меня возникла та же проблема, я разработал класс Generic Dao, который позволяет динамически (с использованием отражения) создавать критерии на основе значений, присвоенных объекту, и запрашивать базу данных

например Страна страна = новая Страна ();
// эти значения позволяют предположить, что они были назначены вашему сервлету на основе сообщения пользователя country.setName ( "Люксембург");

        // This is where your service layer starts. It gets as a param the Country object
        GenericDaoDB gDaoDB = new GenericDaoDB();

        try{
            List resultList = gDaoDB.list(country);
            System.out.println("=========Result Print==============");
            for(int i=0; i<resultList.size();i++){
                 Country resultCountry = (Country)resultList.get(i);
                 System.out.println("Name:"+ resultCountry.getName()+"  Country Code:"+resultCountry.getCountryCode());
             }
        }catch(BasisException e){
            e.printStackTrace();
        }

Если вам нравится, посмотрите http://sourceforge.net/apps/wordpress/jprovocateur/2010/09/23/simple-example-hibernate-query-the-database-without-hql-or-criteria/, где вы можете найти более подробную информацию и пример проекта.

И поскольку это универсальный класс, вы можете использовать его для всех своих Pojos

1 голос
/ 09 октября 2010

Второе предложение Affe: Criteria API - это именно то, что вам нужно, и рекомендуется при работе с динамическими запросами. Это очень хорошо проиллюстрировано в Hibernate Querying 102: Критерии API , которые я цитирую ниже:

Использование API Hibernate Criteria

Hibernate Criteria API предоставляет элегантный способ строить на лету динамические запросы на Hibernate-сохраняются базы данных. Используя эту технику, предыдущий 24-строчный пример может быть закодирован удобнее и понятнее всего 8 строк кода:

Criteria criteria = session.createCriteria(Sale.class);
if (startDate != null) {
  criteria.add(Expression.ge("date",startDate);
}
if (endDate != null) {
  criteria.add(Expression.le("date",endDate);
}
List results = criteria.list();

Давайте посмотрим на использование Hibernate Criteria API более подробно.

Код, показанный в статье, говорит сам за себя, просто посмотрите.

Похожие вопросы

Ресурсы

...