आप GetCollectionName() को ओवरराइड करने के लिए MappingMongoEntityInformation का विस्तार कर सकते हैं। रिपोजिटरी ऑपरेशंस प्रत्येक ऑपरेशन पर getCollectionName() को कॉल करते हैं। मुझे लगता है कि किरायेदार आईडी एक थ्रेडलोकल होगा
public class TenantThreadLocal extends ThreadLocal<String> {
private final static TenantThreadLocal instance = new TenantThreadLocal();
public static TenantThreadLocal instance() {
return instance;
}
}
और ओवरराइड किए गए वर्ग को कंस्ट्रक्टर के साथ छोड़ दिया गया।
public class TenantMappingMongoEntityInformation<T, ID extends java.io.Serializable> extends MappingMongoEntityInformation<T, ID> {
@Override
public String getCollectionName() {
return TenantThreadLocal.instance().get() + super.getCollectionName();
}
}
फिर अपना भंडार बनाएं:
MongoPersistentEntity<YourObject> persistentEntity =
(MongoPersistentEntity<YourObject>)
mongoOperations.getConverter()
.getMappingContext()
.getPersistentEntity(YourObject.class);
MongoEntityInformation<YourObject, ObjectId> mongoEntityInformation =
new MappingMongoEntityInformation<YourObject, ObjectId>(persistentEntity);
CrudRepository<YourObject, ObjectId> repository =
new SimpleMongoRepository<YourObject, ObjectId>(mongoEntityInformation, mongoOperations);