[Java lista] Hibernate commit ?
Avramucz István
avramucz at gmail.com
2008. Feb. 7., Cs, 11:10:09 CET
Ilyet olvastam a Hibernate In Action könyvben:
"Hibernate flushes occur only at the following times:
- When a Transaction is committed
- Sometimes before a query is executed
- *When the application calls Session.flush() explicitly*
Flushing the Session state to the database at the end of a database
transaction is required in order to make the changes durable and is the
common case. Hibernate doesn't flush before every query. However, if
there are changes held in memory that would affect the results of the
query, Hibernate will, by default, synchronize first. You can control
this behavior by explicitly setting the Hibernate FlushMode via a
call to session.setFlushMode(). The flush modes are as follows:
- FlushMode.AUTO---The default. Enables the behavior just described.
- FlushMode.COMMIT---Specifies that the session won't be flushed before
query execution (it will be flushed only at the end of the database
transaction). Be aware that this setting may expose you to stale data:
modifications you made to objects only in memory may conflict with the
results of the query.
- FlushMode.NEVER---Lets you specify that only explicit calls to
flush() result in synchronization of session state with the database.
_We don't recommend_ that you change this setting from the default. It's
provided to allow performance optimization in rare cases. Likewise,
*most applications rarely need to call flush() explicitly*."
AI
Keresztes József írta:
> Sziasztok !
>
> Kísérletezek a Hibernate-tel és egy számomra érdekes dolgot tapasztaltam.
> Én úgy gondoltam ha egy tranzakcióra nem adok ki commit-ot, akkor az
> nem is fog bekerülni az adatbázisba véglegesen. De nem így van, íme a
> példa:
>
> Session session = Hu.getSessionFactory().openSession();
> session.beginTransaction();
> Orszag orszag = new Orszag();
> orszag.setNev("Zimbabwe");
> session.save(orszag);
> session.flush();
> //session.getTransaction().commit();
> //session.close();
> Hu.getSessionFactory().close();
>
> Vagyis ha a session nincs commit-álva, és nincs lezárva sem, és így
> lezárjuk
> a SessionFactory-t, akkor sajnos egy commit kerül végrehajtásra, az
> adat végérvényesen bekerült az adatbázisba :(
>
> Szerintetek ez így normális ?
> A lezáratlan session-nél miért nem egy rollback történik a háttérben ?
>
> Joe
> ------------------------------------------------------------------------
>
> _______________________________________________
> Javalist mailing list
> Javalist at javagrund.hu
> http://javagrund.hu/mailman/listinfo/javalist
>
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: http://javagrund.hu/pipermail/javalist/attachments/20080207/7a53e151/attachment.html
További információk a(z) Javalist levelezőlistáról