2016-10-03 24 views
8

1 soru. Ben işlemsel olarak işaretlenir ve Bahar JPA depo yönteminiBahar JPA depo transactionality

userRegistrationRepository.deleteByEmail(email); 

çağıran bir hizmeti var Ve

@Repository 
public interface UserRegistrationRepository extends JpaRepository<UserRegistration, Long> { 

    UserRegistration findByEmail(String email); 

    void deleteByEmail(String email); 

} 

olarak tanımlanan sorunu fiili işlemle Yok EntityManager "ile başarısız olduğu olmasıdır Şu anki işlem için kullanılabilir - güvenilir 'kaldırmayı' dediğimiz işleyemez; iç içe özel javax.persistence.TransactionRequiredException olduğunu "istisna.

Tamam, hizmet veyadeleteByEmail (..) Değişken baskı olarak işaretleme yöntemi ile bunu çözebilir, ama artık çöküyor neden sadece anlayamıyorum. Spring belgeleri açıkça "depo örnekleri üzerinde CRUD yöntemleri varsayılan olarak işlem vardır." (http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#transactions), ancak görünüşe göre bu bir değil ... Bu ifade yalnızca CrudRepository üyeleri ile ilgili mi?

ps: o Bahar Veri JPA 1.9.4

cevap

10

Haklısınız için. Varsayılan Değişken baskı olarak işaretlenen tarafından sadece CRUD yöntemleri (CrudRepository yöntemleri) vardır. Eğer özel sorgu yöntemler kullanıyorsa sen @Transactional ek açıklamasıyla işaretlemek açıkça gerekir. Hizmet yöntemleri yerine, depo arabirimi yöntemlerini işaretlemenin sonuçlarından da haberdar olmalısınız. daha sonra hazır işlem yayılma konfigürasyonu (Propagation.REQUIRED) kullanılarak durumunda: dış işlem konfigürasyonu kullanılan gerçek bir belirlediği depolarda

işlem konfigürasyon daha sonra ihmal edilecektir.

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#transactions