[Java lista] Hibernate commit ?

Keresztes József jkeresztes at vati.hu
2008. Feb. 7., Cs, 11:23:33 CET


Hi !
 
Az ok hogy flush() hatására kimegy az SQL INSERT az adatbázis felé. 
Már csak egy rollback() vagy egy commit() hiányzik.
Ha ilyet nem mondok, és a session-t close()-zal lezárom akkor természetesen
ROLLBACK történik hiszen nem mondtam commit-ot. Fő a biztonság !
Viszont ha le sem zárom a session-t, és lezáródik más által (SessionFactory zárás)
akkor viszont megy egy nem kívánt COMMIT.
Most még azt is kipróbáltam hogy ha nem zárom le a SessionFactory-t sem, akkor
is tökéletes a dolog, nincs commit. 
 
Igazából talán a SessionFactory-nak kéne egy paraméter hogy mi a túróst csináljon
a lezáratlan session-nel !
 
A válaszokat köszönöm !
 
Joe
________________________________

Feladó: javalist-bounces at javagrund.hu meghatalmazó: Avramucz István
Küldve: 08-02-07, Cs 11:10
Címzett: javalist at javagrund.hu
Tárgy: Re: [Java lista] Hibernate commit ?


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 nem text típusú csatolt állomány át lett konvertálva...
Név: nem elérhető
Típus: application/ms-tnef
Méret: 7492 bytes
Leírás: nem elérhető
Url : http://javagrund.hu/pipermail/javalist/attachments/20080207/2e07635e/attachment-0001.bin 


További információk a(z) Javalist levelezőlistáról