Код гибернации .. некоторая путаница - PullRequest
0 голосов
/ 04 сентября 2011
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction transaction = null;
    try {
        transaction = session.beginTransaction();
        Consultants consultants = new Consultants();  // 1
        consultants.setUsername("Rahul");             // 2     
        consultants.setPass("rahul");                 // 3
        session.save(consultants);                     
        transaction.commit();
    } catch (HibernateException e) {
        System.out.println("Exception:"+e.getMessage());
        transaction.rollback();
        e.printStackTrace();
    } finally {
        session.close();
    }

см. В приведенном выше коде, кроме операторов 1,2 и 3, весь код остается одинаковым для каждого метода.Есть ли лучший способ переписывать вышеуказанный код каждый раз, то есть снова и снова, чтобы мы использовали один и тот же код?

Спасибо!

Ответы [ 4 ]

3 голосов
/ 04 сентября 2011

Не знаю, о каком повторении вы жалуетесь, но вы можете создать «универсальный» метод для сохранения любого сопоставленного объекта:

public void save(Object entity) {

    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction transaction = null;
    try {
        transaction = session.beginTransaction();
        session.save(entity);                     
        transaction.commit();
    } catch (HibernateException e) {
        System.out.println("Exception:"+e.getMessage());
        transaction.rollback();
        e.printStackTrace();
    } finally {
        session.close();
    }
}

А затем используйте этот метод, если хотите сохранить консультанта:

    Consultants consultants = new Consultants();
    consultants.setUsername("Rahul");
    consultants.setPass("rahul");

    save(consultants);

С уважением,

2 голосов
/ 04 сентября 2011

Да, очень определенно.То, что вы определили, это возможность применения шаблона шаблона метода .См., Например, Spring TransactionTemplate .Даже если вы не хотите использовать Spring - если вы используете Hibernate, вам, вероятно, все равно придется управлять им с помощью Spring - вы можете взглянуть на источник , чтобы увидеть, как это можно сделать.

0 голосов
/ 06 сентября 2011

транзакция = session.beginTransaction (); session.save (юридическое лицо);
transaction.commit ();

Чтобы избежать вышеуказанного повторения во всех методах, связанных с постоянством, вы должны пройти через HibernateTemplate or JpaTemplate Который обрабатывает вышеуказанное повторение для нас. А для операции сохранения вам нужно просто позвонить по номеру save(object), и он сохранит ваши данные в постоянстве, и вам не придется беспокоиться о его реализации.

0 голосов
/ 04 сентября 2011

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

Если вы используете Spring, все, что вам нужно сделать, это переместить обработку транзакций за пределы кода Java с помощью AOP. Без Spring есть другой способ управления транзакциями

вот ссылка на весеннюю документацию по управлению транзакциями управление транзакциями

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