Reputation: 4807
As my title described, I am using hibernate Auto
flush mode mechanism in my application. So, when I change any data in a hibernate persistent object, it reflects automatically in the database. I don't want this. So I found a solution to use FlushMode Commit
instead.
So here is my actual question:
Commit
flush mode instead of Auto
? and What is the meaning of this statement from the documentation?
The Session is sometimes flushed before query execution in order to ensure that queries never return stale state.
http://docs.jboss.org/hibernate/orm/3.5/javadoc/org/hibernate/FlushMode.html
Upvotes: 14
Views: 35588
Reputation: 5948
Hibernate (and JPA) are designed to automatically detect and persist changes to persistent objects to the database. There is no "save" operation.
If you don't want things saved, you should use detached objects. Either use a StatelessSession
to load them, or call detach after loading your objects. This removes them from the monitoring that will automatically save them.
Don't mess with the flush settings, it will just give you headaches later.
Upvotes: 12
Reputation: 1082
is it better to use Commit flush mode instead of Auto
When your application uses queries the FlushMode.COMMIT
will most likely perform better because it will not flush session before each query. I know that per javadoc it should flush session only when necessary but from my experience FlushMode.COMMIT performs even better in read-only sessions. Auto-flush doesn't mean that any change to the persistent object is immediately posted to the database.
what is meaning of below statement specified in document
The Session is sometimes flushed before query execution in order to ensure that queries never return stale state.
As I've written above when FlushMode.AUTO (default) is used it will flush session before every query (HQL, Criteria, SQL query) made to the database to make sure results will contain all entities added within current session.
Upvotes: 8