Для совершения сделки вам потребуется Transaction
объект, который будет возвращен session.beginTransaction();
.
Измените код следующим образом:
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction(); //org.hibernate.Transaction
session.save(student);
tx.commit();
Update
Это хорошая практика, чтобы использовать надлежащий try-catch
блок:
public boolean saveStudent(Student student)
{
Session session=null;
Transaction tx=null;
SessionFactory sessionFactory = null;
try
{
sessionFactory = new Configuration().configure().buildSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
session.save(student);
tx.commit();
return true;
}
catch (Exception e)
{
if(tx!=null && tx.isActive())
{
tx.rollback();//rolebacks the currect active transaction
}
return false;
}
finally
{
if(session!=null && session.isOpen())
{
session.close();
}
if(tx!=null)
{
tx=null;
}
}
}
вызова 'buildSessionFactory' при каждом вызове также не Хорошая практика. Вы должны создать еще один класс, пусть скажем, имя 'HibernateHelper', откуда вы получите' session', вызывая метод 'Hibern ateHelper.getsession() ', и этот' HibernateHelper' имеет код, позволяющий сказать объединение пулов, создание фабрики сеансов и т. д. – Amogh
Большое спасибо! Это помогло моей проблеме – user1654352