Справочная информация: я использую объекты гибернации для доступа к базе данных.
внутри дела моего сервлета есть:
Account account=getUserAccountHibernateObject();
doWorkOnAccount(account);
decreaseAccountBalanceAndSaveToDB(account);
Так как сервлет допускает одновременный доступ, accountBalance иногда действительно портится. У меня есть несколько вопросов:
- Какая лучшая практика здесь? Должен ли мой поток реализовать SingleThreadModel для предотвращения одновременного доступа? Или синхронизировать все в doGet?
Должен ли я сделать следующее? Что правильно делать в спящем режиме?
Account account=getUserAccountHibernateObject();
doWorkOnAccount(account);
account=getUserAccountHibernateObject();
decreaseAccountBalanceAndSaveToDB(account); //also synchronize this method.
Edit:
предварительное решение:
благодаря ссылке, предоставленной в ответах, я думаю, что мне нужно охватить транзакцию БД по запросу сервлета:
beginTransaction();
try{
Account account=getUserAccountHibernateObject();
doWorkOnAccount(account);
decreaseAccountBalanceAndSaveToDB(account);
commitTransaction();
}catch(Exception ep){
rollBackTransaction();
}finally{
closeSession();
}
если есть какой-нибудь hibernate / db-гуру, что-то там не так, пожалуйста, дайте мне знать.