Работа в спящем режиме.Нужно ли использовать транзакцию каждый раз?Будет ли это причиной каких-либо проблем, если я не буду использовать их при получении данных? - PullRequest
2 голосов
/ 27 января 2012

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

public static Student getStudentById(long id) {
    Session session = null;
    Student student = null;
    //Transaction transaction=null;
    try {
        session = HibernateUtil.getSessionFactory().openSession();
        //transaction = session.getTransaction();
        //transaction.begin();
        /**
         * names in the query should match the related class name and variable names.
         */
        Query query = session.createQuery("from Student where studentId = :id");
        query.setLong("id", id);
        student = (Student) query.uniqueResult();
        //transaction.commit();
    } catch (HibernateException e) {
        //transaction.rollback();
        e.printStackTrace();
    } finally {
        session.close();
    }
    return student;
}

Ответы [ 2 ]

5 голосов
/ 26 августа 2014

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

Вы можете ссылаться на документацию hibernate здесь.

0 голосов
/ 27 января 2012

Нет, вам не нужно использовать транзакцию до тех пор, пока вы не планируете сохранять данные внутри БД. И в своем вопросе вы не сохраняете дату, когда вы просто извлекаете записи из БД. Так что здесь не обязательно использовать транзакцию.

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