sawan
sawan

Reputation: 2381

Whats wrong with my hibernate transaction and session

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

Answers (1)

Vrushank
Vrushank

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

Related Questions