[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