2
我在我的項目中使用了Spring Data,並且我有大量的存儲庫。現在,我想一個方法添加到一些倉庫的,但不是所有的人,所以我創建了一個接口「LoggingRepositoryCustom」,即(簡體)看起來是這樣的:在Spring數據中自定義實現中間存儲庫
@NoRepositoryBean
public interface LoggingRepositoryCustom<T extends IEntity, ID extends Serializable> {
<S extends T> S save(S entity, AppUser author);
}
正如我需要有一個這個自定義實現,我也創建了「LoggingRepositoryImpl」,實現該接口:
@NoRepositoryBean
public class LoggingRepositoryImpl<T extends IEntity, ID extends Serializable> implements LoggingRepository {
@Override
public <S extends T> S save(S entity, AppUser author) {
//impl
}
}
最後,我有一些庫,應該擁有上述functionity,如「AppUserRepo」:
@Repository
public interface AppUserRepo extends PagingAndSortingRepository<AppUser, Long>, LoggingRepositoryCustom<AppUser, Long> {
//methods of this repo
}
然而,當我嘗試部署該應用程序,我得到以下異常:
org.springframework.data.mapping.PropertyReferenceException: No property save found for type AppUser!
看來,自定義實現不會反映春季數據試圖創建一個神奇的方法從名稱約定,從而尋找屬性「保存」的「AppUser」,這是不存在的。有沒有一種方法可以實現一個接口,並由其他接口進一步擴展?
好吧,當我實現AppUserRepo和LoggingRepo繼承的方法工作的,但我不希望創建的每一個存儲庫將擴大LoggingRepo的實現,因爲實現是相同的所有的類... –
您需要創建一個「擴展LoggingRepositoryImpl」(在該父級定製倉庫中實現的常用邏輯)的每個單一倉庫的「空」自定義實現,以便告訴spring數據它應該生成這些定製代碼... – Pras
嗯,是的,這或多或少是我的問題的解決方案。但是,如果可以避免創建所有存儲庫的空白實現,那麼我會實現這一點,這將會更好:)謝謝您的回覆! –