Согласно моему пониманию в спящем режиме (пожалуйста, подтвердите)
1- Вы должны session.close()
, если вы получите его getSessionFactory().openSession()
.
2- Не нужно session.close()
, если вы получите его getSessionFactory().getCurrentSession()
. Он автоматически закрывается после commit().
3- @2 При использовании getSessionFactory().getCurrentSession()
мы должны делать все действия DB внутри активной транзакции, чтобы мы могли совершить() в конце.
4- Hibernate en-queues все операции сохранения, обновления и удаления и отправляет их на сервер базы данных только после операции flush() или совершает транзакцию или закрытие сеанса, в котором происходят эти операции (согласно javadoc)
Из приведенных выше пунктов, если я рассматриваю 1 и 4, тогда следующий код должен работать:
Session session = HibernateUtil.getSessionFactory().openSession();
AccountDetails ac = new AccountDetails();
//perform set operations
session.save(ac);
session.close();
System.out.println("new account stored.");
НО он не работает, то есть он работает плавно, но не отражает (сохраняет) в базе данных. Почему это так? Когда я пишу код внутри транзакции и фиксирую, он сохраняется.
Я думаю, что у меня нет основной вещи. Просьба уточнить.