Reputation: 2381
I have code as following.
class HibernateTest {
public static void main(final String[] args) {
final HibernateTest objHibernateTest = new HibernateTest();
objHibernateTest.saveEmployeeDetails();
objHibernateTest.saveEmployeeLeaves();
objHibernateTest.saveEmployeePayment();
}
private void saveEmployeeDetails() {
final Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.getTransaction().begin();//Begin Transaction
Employee e = new Employee();//consider Employee have data
session.update(e);
session.flush();
session.clear();
}
private void saveEmployeeLeaves() {
final Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Employee e = new Employee();//consider Employee have data
session.save(e);
session.flush();
session.clear();
}
private void saveEmployeePayment() {
final Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Employee e = new Employee();//consider Employee have data
session.save(e);
session.flush();
session.getTransaction().commit();//Commit Transaction
}
}
In above code i call saveEmployeeDetails()
first where i get session and begin transation and then flush() and clear()
for caching purpose.
I do same thing in saveEmployeeLeaves()
.
In function saveEmployeePayment()
, i perform something and save the employee details.
But in this scenario only the Payment
details get stored in db not Employee details
and Leave details
Why this so?
Upvotes: 0
Views: 143
Reputation: 2813
You need to commit your transaction for every update. Updating in the last method call will not commit everything before. The scope of your session
variable is restricted to the method block.
private void saveEmployeeDetails() {
final Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.getTransaction().begin();//Begin Transaction
Employee e = new Employee();//consider Employee have data
session.update(e);
session.flush();
session.getTransaction().commit(); // Commit after update
session.clear();
}
private void saveEmployeeLeaves() {
final Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Employee e = new Employee();//consider Employee have data
session.save(e);
session.flush();
session.getTransaction().commit(); //Commit after update
session.clear();
}
private void saveEmployeePayment() {
final Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Employee e = new Employee();//consider Employee have data
session.save(e);
session.flush();
session.getTransaction().commit();//Commit Transaction
}
Upvotes: 1