Изучаю 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()
?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Вывод статей происходит на двух страницах, 1 - превьюшные блоки, что и есть переход на опредстатью, а 2 - конкретная статья, где используется...