Изучаю Hibernate.
Я так понял, что транзакция гарантирует, что либо все данные этой транзакции будут сохранены, либо нет. Тогда логично использовать транзакции для операций, связанных с добавлением/обновлением данных в БД. Почему тогда я должен использовать аннотацию @Transactional для выполнения SELECT? Например:
UserDAO:
public class UserDAO {
private SessionFactory sessionFactory;
public String getNameByUserId(int userId) {
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("select u.name from User u where u.id=:userId");
...
...
return name;
}
}
UserService:
public class UserService {
private UserDAO userDAO;
@Transactional
public String getNameByUserId(int userId) {
return userDAO.getNameByUserId(userId);
}
}
UPD:
Если я уберу @Transactional, то на строке Session session = sessionFactory.getCurrentSession(); будет выброшено исключение. Я так понял, что в этом случае мне нужно делать openSession() и close() вручную? А как тогда работает getCurrentSession()?
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости