Sorunuz gerçekte ne hakkında? @Repository
Ek açıklamanın kullanımı veya @Transactional
.
@Repository
Bildirdiğiniz arayüz, Spring Data altyapısının oluşturduğu ve yine de istisna çevirisini etkinleştiren bir proxy tarafından destekleneceğinden, hiç gerekli değildir. Dolayısıyla, bu ek açıklamayı Spring Data veri havuzu arayüzünde kullanmanın hiçbir etkisi yoktur.
@Transactional
- JPA modülü için, proxy ( SimpleJpaRepository
) 'yi destekleyen uygulama sınıfında bu ek açıklamaya sahibiz . Bunun iki nedeni vardır: Birincisi, nesnelerin kalıcı hale getirilmesi ve silinmesi JPA'da bir işlem gerektirir. Bu nedenle, yöntemin açıklamasını alarak yaptığımız bir işlemin çalıştığından emin olmalıyız @Transactional
.
Kesinlikle gerekli olmayan ancak işlem altyapısında birkaç optimizasyonu tetikleyen gibi findAll()
ve findOne(…)
kullanılıyor gibi okuma yöntemleri @Transactional(readOnly = true)
( kalıcılık sağlayıcılarının kapatırken kirli denetimleri atlamasına izin FlushMode
verecek MANUAL
şekilde ayarlanması EntityManager
). Bunun ötesinde bayrak, JDBC Bağlantısında da ayarlanır ve bu, o düzeyde daha fazla optimizasyona neden olur.
Hangi veritabanını kullandığınıza bağlı olarak, tablo kilitlerini atlayabilir veya yanlışlıkla tetikleyebileceğiniz yazma işlemlerini reddedebilir. Bu nedenle @Transactional(readOnly = true)
, bilgi havuzu arayüzünüze ek açıklamayı kolayca ekleyebileceğiniz sorgu yöntemlerini kullanmanızı öneririz . @Transactional
Bu arayüzde beyan etmiş veya yeniden dekore etmiş olabileceğiniz manipüle etme yöntemlerine bir düzlük eklediğinizden emin olun .