पर अन्य कस्टम फ़ंक्शंस http://docs.spring.io/spring-data/data-jpa/docs/current/reference/html/repositories.html#repositories.custom-implementations स्प्रिंग प्रलेखन सभी रिपॉजिटरीज़ या एकल रिपॉजिटरीज़ में कस्टम कार्यक्षमताओं को जोड़ने के लिए उदाहरण देता है, दोनों नहीं।स्प्रिंग जेपीए सभी रिपॉजिटरीज़ को कस्टम कार्यक्षमता जोड़ते हैं और साथ ही साथ एक ही रिपोजिटरी
मान लीजिए कि मैं सभी रिपॉजिटरीज़ (कस्टम रिपोजिटरी फैक्टरी बीन का उपयोग करके) और कुछ अन्य को केवल एक ही रिपॉजिटरीज़ (डॉक्स कहते हैं कि एक कस्टम इंटरफेस और कस्टम इंपल) का उपयोग करने के लिए कुछ कस्टम फनक्स जोड़ना चाहते हैं; इसे कैसे प्राप्त किया जा सकता है?
कुछ उदाहरण कोड जहां मैंने सभी भंडारों में "setCurrentTenansInSession" विधि जोड़ा; अब मैं एक कस्टम विधि जोड़ना चाहता हूं, उदा। "newCustomMethod", ओना एकल भंडार (जो एक MyJpaRepository है, मेरे कस्टम भंडार कारखाने के लिए)। मैं यह कैसे करु?
कस्टम व्यवहार इंटरफ़ेस:
@NoRepositoryBean
public interface MyJpaRepository<T, ID extends Serializable> extends JpaRepository<T, ID> {
public void setCurrentTenantInSession(Object object);
}
कस्टम व्यवहार कार्यान्वयन:
public class MultiTenantSimpleJpaRepository<T, ID extends Serializable> extends SimpleJpaRepository<T, ID> implements MyJpaRepository<T, ID> {
public void setCurrentTenantInSession(Object object) {
//custom impl
}
}
कस्टम भंडार कारखाने सेम:
public class MultiTenantJpaRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extends Serializable> extends JpaRepositoryFactoryBean<T, S, ID> {
@Override
protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityManager) {
return new MultiTenantJpaRepositoryFactory(entityManager);
}
}
और अंत में कस्टम भंडार कारखाना:
public class MultiTenantJpaRepositoryFactory extends JpaRepositoryFactory {
public MultiTenantJpaRepositoryFactory(EntityManager entityManager) {
super(entityManager);
}
@Override
protected JpaRepository<?, ?> getTargetRepository(RepositoryMetadata metadata, EntityManager entityManager) {
final JpaEntityInformation<?, Serializable> entityInformation = getEntityInformation(metadata.getDomainType());
final SimpleJpaRepository<?, ?> repo = new MultiTenantSimpleJpaRepository(entityInformation, entityManager);
repo.setLockMetadataProvider(LockModeRepositoryPostProcessor.INSTANCE.getLockMetadataProvider());
return repo;
}
@Override
protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {
return MultiTenantSimpleJpaRepository.class;
}
}
बहुत धन्यवाद kkamenev! – lincetto
'वसंत-डेटा-कॉमन्स '1.11 के रूप में' jpa: repositories' के लिए' फैक्ट्री-क्लास 'विशेषता को बहिष्कृत करने के बजाय 'बेस-क्लास =" com.example.CommonCustomRepositoryImpl "निर्दिष्ट करें। बेस क्लास निर्दिष्ट करते समय कारखाने की आवश्यकता नहीं है। –