bsiamionau bsiamionau - 4 months ago 18
Java Question

HIbernate commit() and flush()

I googled a lot and read about

org.hibernate.Transaction.commit()
and
org.hibernate.Session.flush()
a lot, know purpose of each method, but still have a question.

Is it good practice to call
org.hibernate.Session.flush()
method by hand? As said in
org.hibernate.Session
docs,


Must be called at the end of a unit of work, before commiting the transaction and closing the session (depending on flush-mode, Transaction.commit() calls this method).


Could you explain me purpose of calling
org.hibernate.Session.flush()
by hand if
org.hibernate.Transaction.commit()
will call it automatically?

Thanks!

Answer

In the Hibernate Manual you can see this example

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();


for ( int i=0; i<100000; i++ ) {
    Customer customer = new Customer(.....);
    session.save(customer);
    if ( i % 20 == 0 ) { //20, same as the JDBC batch size
        //flush a batch of inserts and release memory:
        session.flush();
        session.clear();
    }
}

tx.commit();
session.close();

Without the call to the flush method, your first-level cache would throw an OutOfMemoryException

Also you can look at this post about flushing

Comments