Одинаковое кодирование для разных методов дао - PullRequest
0 голосов
/ 08 июня 2011

Я изучал hibernate и заметил, что на каждом дао вы должны получить сессию, начать транзакцию. Выполнить все операции, а затем зафиксировать

private void createAndStoreEvent(String title, Date theDate) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();

        //Perform operations...

        session.getTransaction().commit();
    } 

Затем я заметил в фреймворке под названием Appfuse, которыйиспользует hibernate, имеют методы dao, как показано ниже. Я не вижу begintransaction и commit

    public List<Person> findByLastName(String lastName) {
    //begintransaction
        return getHibernateTemplate().find("from Person where lastName=?", lastName);
    //Commit
    }

Интересно, как appfuse оборачивает операции dao с помощью session.beginTransaction () и session.getTransaction (). commit ();

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

Ответы [ 2 ]

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

HibernateTemplate является частью Spring.Вы можете прочитать больше об этом по этой ссылке.Но начиная с Spring 3.0 он считается устаревшим в пользу декларативного управления транзакциями .

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

Я не знаю, как это делает AppFuse, но очень распространенный способ внедрения управления транзакциями в сервисный уровень приложения - использование Аспектно-ориентированного программирования. Если вы используете Spring Framework, этот (из руководства) является хорошим справочником.

...