2014-04-27 28 views
13

Bir Spring'teki CRUD işlemlerini gerçekleştiren bu CrudRepository Spring Verisine sahibim.Spring CrudRepository istisnaları

@Repository 
public interface IUserRepository extends CrudRepository<User, String> { 

} 

User benim DB'nin bir kullanıcı tablosunun Varlık olduğunu.

  • delete(String ID)
  • findOne(String ID)
  • save(User user)
  • documentation belirtildiği üzere

, silme ve bulmak operasyon durumunda IllegalArgumentException atmak verilen id: CrudRepository deposuna yani aşağıdaki işlemleri ekler null kaydetme işlemi herhangi bir istisna atmaz. Sorun, CrudRepository'in javadoc'unun bu operasyonlar tarafından atılan diğer istisnalardan bahsetmemesidir. Örneğin, delete(String ID) işleminin sağlanan ID'nin DB'de olmaması durumunda EmptyResultDataAccessException attığını söylemez.

save(User user) işleminin javadoc'unda, bir veri bütünlüğü kısıtlaması (benzersiz alanlar ve yabancı anahtarlarda) kesen yeni bir Kullanıcı eklediğinizde hangi istisnaların atıldığı açık değildir. Ayrıca, yeni veya mevcut bir Kullanıcı yazıp yazmadığınızı da size uyarmaz: Yeni bir Kullanıcı yaratır veya mevcutsa üzerine yazar (bu bir Ekleme + Güncelleme işlemi).

Bir kuruluş uygulamasında, bir işlemin fırlayabildiği her atılabilir özel durumu yakalayabilmem gerekir ve bunu işlemin javadoc'unda okumalıyım.

CrudRepository istisnaları hakkında net bir belge biliyor musunuz? @Repository (veya yapılandırılmış) ile açıklamalı bütün fasulye - JPA kalıcılık sağlayıcıları tarafından atılan tüm istisnalar Bahar en DataAccessException dönüştürülür, böylece

, yerleşik istisna çeviri mekanizmasının

cevap

22

Bahar teşekkür ederiz.

  • NonTransientDataAccessException - -

    dört ana grubu vardır bu özel durum nedeni düzeltilir sürece aynı operasyonun bir yeniden deneme başarısız olur istisnalar vardır. Bu nedenle, örneğin, mevcut olmayan bir kimliği iletirseniz, kimlik veritabanında yoksa, başarısız olur. Bazı kurtarma adımlarından sonra, geri kazanılabilen istisnaların "tersi" - bunlar "karşıt" dır. Örneğin, iyi biçimlendirilmemiş bir betik işlemeye çalışırken, SQL ile ilgili istisnalar için API dokümanlarındaki daha fazla ayrıntı

    ScriptException. Herhangi bir açık adım olmaksızın kurtarmanın mümkün olduğu durumlar istisnadır, örneğin: http://www.microsoft.com/downloads/index.php/ Veritabanına bir zaman aşımı olduğunda, birkaç saniye sonra yeniden deniyorsunuz.sözü

, tüm istisnalar hakkında belgelerine bulmak için ideal bir yer - API kendisi - sadece DataAccessException hiyerarşisi geçmesi.

+0

Tüm istisnalara bağlantılar sağladığınızı ve ne anlama geldiklerini ayrıntılı olarak açıkladığınız için teşekkür ederiz. –

+1

@vtor "yerleşik istisna çeviri mekanizması" ile ne demek istiyorsun? Bahar belgelemesinin neden bazı yöntemlerin bu DataAccessException'ı, örneğin CrudRepository sınıfının kaydetme yöntemini attığını açıkça söylemediğini merak ediyorum. – fabrik