Aynı sınıfta başka bir Transactional yöntemini çağıran bir Transaction yöntemi olan bir @Service sınıfım var. Bunun için geri alma davranışını test ediyordum ve düzgün çalışmadığını buldum. "- geri alma JDBCTransaction" log gösterdiği halde ben veritabanını kontrol edip değişiklikler vardır methodOne çalıştırdıktan sonraYaylı @Transaction yöntemi ve geri alma
@Service
public class DefaulService implements ervice
{
@Transactional
public void methodOne()
{
methodTwo();
//question edited
//this seems to be the problem
this.serviceDAO.executeUpdateOperation();
//test rollback
throw new RuntimeException();
}
@Transactional
public void methodTwo()
{
//DAO stuff
}
}
: Kod şöyle görünür.
Ben teker teker yöntemini çağırır ve sonunda bir istisna eklerseniz, değişiklikler doğru şekilde geri alınır.
İç içe @Transaction çağrısı sırasında gerçekleşen değişikliklerin doğru bir şekilde geri alınmasını sağlamanın bir yolu var mı? REQUIRED'in varsayılan yayılımının bunu başaracağı izlenimindeydim, ama işe yaramıyor gibi görünüyor. Teşekkür
Tamam GÜNCELLEME, sadece başka bir şey fark ettim. İstisna atmadan hemen önce, servisin servisini arıyorum ve 'executeUpdate' aracılığıyla manuel güncelleme yapıyorum. Bu satırı yorumlarsam, içe aktarılan rollback çalışır. Yani sorun aslında DAO çağırıyor ve executeUpdate sorgusu çalıştırıyor gibi görünüyor. Fakat bu, mevcut işlem içinde de çalışmıyor mu?
'methodOo()' '' Transactional 'ifadesinden 'methodTwo()' işlevini çağrıldığında eski kodun dikkate alınmadığını biliyor musunuz? Daha fazla bilgi için [makale] bölümüne bakın (http://nurkiewicz.blogspot.com/2011/10/spring-pitfalls-proxying.html). Ancak bu sizin sorunlarınıza neden olmaz, ancak bilmeye değer. –
Evet, ancak MethodTwo bağımsız olarak çağrılabildiğinden, bu gibi durumlarda kendi ek açıklamalarına ihtiyacı vardır. Şu anda, executeUpdate'in neden işlemin gerçekleşmesine neden olduğu konusunda stumped, belki de bu varsayılan davranıştır. – JayPea
serviceDao işlem yayımı nedir? REQUIRES_NEW herhangi bir şansa mı bağlı? – Hendrik