Есть ли способ восстановить объекты, соответствующие нескольким критериям (не обязательно ID)? - PullRequest
0 голосов
/ 23 июня 2011

Я работаю над проектом, который использует Hibernate.У нас есть база данных, и теперь я хотел бы запросить ее.

В идеальном случае я знаю, что могу восстановить объект по его идентификатору или с помощью языка запросов Hibernate.Но для меня было бы оптимальным, если бы существовал метод, которому я отправляю объект с атрибутами, которые я хочу использовать в качестве фильтра, и возвращаю все объекты в этой таблице, которые соответствуют этим критериям.Например,

Person p = new Person();
p.setName("Junior");
p.setAge(10);
session.Load(Person.class, p); //this would return all "junior" with age = 10

Я думаю, что Hibernate обеспечит аналогичную функциональность.Является ли?Какой метод мне следует использовать?

Спасибо, Оскар

РЕДАКТИРОВАТЬ: @nIKUNJ указал мне на критерии, что будет очень похоже на то, что мне нужно.Проблема в том, что я хотел бы иметь класс DatabaseManager, который бы обрабатывал функции сохранения, загрузки и т. Д.Например, моя загрузка выглядела бы так:

public <T extends Serializable> List<T> load(T filters, Class<T> type)
{
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();

        List<T> searchResult;
        session.beginTransaction(); 

        searchResult = ((List<T>)session.get(type, filters)); //assuming the method
                                                 //I asked for in the question exists


        return searchResult;
}

Таким образом, я мог бы отправить почти любой объект этому методу, а метод запросил бы базу данных и вернул бы мне список объектов, соответствующихкритерии.

У вас есть идея, как я могу имитировать это поведение, используя класс Criteria?

Спасибо, Оскар

1 Ответ

1 голос
/ 23 июня 2011

Я думаю, что Hibernate Критерии могут помочь вам.

Вы можете использовать один класс parameter, имеющий три атрибута: name, type and value. Name будет именем вашего столбца, type будет равно, меньше, больше, чем и т. Д., И value будет значением для этого условия.
Например, name="person.age", type = greater equal, value=18. Создайте служебный метод, который преобразует эти параметры в объекты критериев.

Теперь создайте метод, подобный этому:

public <T extends Serializable> List<T> load(List<Parameter> params, Class<T> type)
{
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();

        List<T> searchResult;
        session.beginTransaction(); 
        Criteria criteria = createCriteriaFromParams(params);    
        searchResult = criteria.list();  

        return searchResult;
}  

Это очень простой сценарий. Вы можете создать несколько сложных критериев, добавив некоторые дополнительные атрибуты в список параметров.

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