What's the use of session.flush() in Hibernate

后端 未结 9 1175
甜味超标
甜味超标 2020-11-28 01:38

When we are updating a record, we can use session.flush() with Hibernate. What\'s the need for flush()?

9条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-11-28 01:59

    I would just like to club all the answers given above and also relate Flush() method with Session.save() so as to give more importance

    Hibernate save() can be used to save entity to database. We can invoke this method outside a transaction, that’s why I don’t like this method to save data. If we use this without transaction and we have cascading between entities, then only the primary entity gets saved unless we flush the session.

    flush(): Forces the session to flush. It is used to synchronize session data with database.

    When you call session.flush(), the statements are executed in database but it will not committed. If you don’t call session.flush() and if you call session.commit() , internally commit() method executes the statement and commits.

    So commit()= flush+commit. So session.flush() just executes the statements in database (but not commits) and statements are NOT IN MEMORY anymore. It just forces the session to flush.

    Few important points:

    We should avoid save outside transaction boundary, otherwise mapped entities will not be saved causing data inconsistency. It’s very normal to forget flushing the session because it doesn’t throw any exception or warnings. By default, Hibernate will flush changes automatically for you: before some query executions when a transaction is committed Allowing to explicitly flush the Session gives finer control that may be required in some circumstances (to get an ID assigned, to control the size of the Session)

提交回复
热议问题