2011-03-07 34 views
5

Bu davranışın ardındaki mantık nedir? nedense bir işlem dışında iki uygun işlemleri yürütmek durumundaNeden Hazırda bekletme işlemi yalnızca Otomatik Doldurma?

ikinci operasyon ise ben o kadar otomatik sifon beklenebilir, (önerilmez, ben! biliyorum) ve ben otomatik sifon için Hibernate yapılandırılmış ettik Otomatik deşarjı tetiklemelidir (list, iterate veya executeUpdate).

protected boolean autoFlushIfRequired(Set querySpaces) throws HibernateException { 
    errorIfClosed(); 
    if (! isTransactionInProgress()) { 
     // do not auto-flush while outside a transaction 
     return false; 
    } 
    AutoFlushEvent event = new AutoFlushEvent(querySpaces, this); 
    AutoFlushEventListener[] autoFlushEventListener = listeners.getAutoFlushEventListeners(); 
    for (int i = 0; i < autoFlushEventListener.length; i++) { 
    autoFlushEventListener[i].onAutoFlush(event); 
    } 
    return event.isFlushRequired(); 
} 

Güncelleme: değilse autoFlushIfRequried yönteminin ikinci satırda açık kontrol için, ne olacağını tam olarak

bu istemde hazırda konuyu bulmak için size axtavt ederiz değiştir (3.2'de): FlushMode.AUTO -> COMMIT when outside a transaction.

İlgili bir sorun hala açık: delay IDENTITY insertions in the case of FlushMode.MANUAL/NEVER, ancak hiçbir tartışma "Bir işlemin dışında çalışırken, FlushMode.AUTO kötü bir şeydir."

+1

_When_ Otomatik temizleme yapmayı bekliyor musunuz? – axtavt

+0

@axtavt - Sorumu biraz daha spesifik olmak için güncelledim. Normalde otomatik olarak çalışan, "list", "yineleme" veya "executeUpdate" gibi bir işlemi gerçekleştirirsem otomatik olarak daralmasını beklerim. İşlemlerin yukarıdaki kodla ilişkisini anlamıyorum. –

+0

Ben gördüm ve upvoted. Hazırda bekleyen çocuklar "bu kötü bir şey" diyor: http://opensource.atlassian.com/projects/hibernate/browse/HHH-1410 – axtavt

cevap

2

FlushMode için docummentation

Oturum bazen sorgular bayat devlet asla geri sağlamak amacıyla sorgu çalıştırılmadan önce temizlenir diyor çünkü. Bu varsayılan yıkama modudur.

Otomatik, ne demek olduğunu düşündüğünüz anlamına gelmez. İsim, tartışmasız, kötü bir şekilde seçildi, ancak her seanstan sonra bir floş yapıldığı anlamına gelmez. Bu nedenle JDBC'nin her zaman yaptığı açıklamadan sonra bir taahhüt yapan JDBC'nin otomasyonuna benzemiyor.

İlgili konular