2010-03-04 15 views
5

Veritabanına bir ekleme yapan bazı hazırda bekletme kodum var ve buna ek olarak özelleştirilmiş bir PostInsertEventListener ekleniyor. (Temel olarak diğer kayıtların uygun şekilde güncelleştirildiğinden emin olmak için bir tetikleyici)Hibernate PostInsertEventListeners -User aynı işlemi beğendiniz mi?

Yapmam gereken şey, kodun EventListener içindeki orijinal ekleme ile aynı işlemi kullanmasını sağlamaktır, böylece eğer insert başarılı bir şekilde işlemezse, EventListener ateş etmeyecek.

Bunu yapmak için javax.transaction.Syncronization ve Hibernate'in transaction.registerSyncronization() yöntemlerini kullanabileceğinizi duymuştum, ancak bulabileceğim hiçbir kullanım örneği yoktur.

Herhangi bir yardım için teşekkür ederiz.

cevap

3

Bunun mümkün olduğunu düşünmüyorum.

Anladığım kadarıyla, bazı kodları yalnızca işlem başarıyla tamamlandığında (işlem yapıldıysa) yürütmek istersiniz. Ancak, işlem gerçekleşirse, bittiği için aynı işlemde başka bir şey yapamazsınız.

Yapabilecekleriniz, işlemin içinde (işlemden önce) çağrılan bir PreInsertEventListener kullanıyor. Eğer işlem başarısız olursa (eğer işlem başarılı olursa, bunu yapamayacağımızdan beri bilmediğimizden) olay dinleyicisi olayı tetikleyecektir, ancak işlem başarısız olursa dinleyicide değiştirdiğiniz herhangi bir şey veritabanında saklanmayacaktır. Dinleyiciler listesi için https://www.hibernate.org/hib_docs/v3/api/org/hibernate/event/EventListeners.html'u kontrol edin.

Bir uyarı olsa da. Bir dinleyicide çok fazla veri değişikliği yapmamalısınız. Özellikle, herhangi bir tembel yüklemeyi tetiklememelisiniz.