sql >> Database >  >> NoSQL >> MongoDB

Op collectie gebaseerde multi-tenancy in Spring Data Mongo

U kunt MappingMongoEntityInformation uitbreiden om getCollectionName() te overschrijven. De bewerkingen van de opslagplaats roepen getCollectionName() aan bij elke bewerking. Ik neem aan dat de tenantId een ThreadLocal is

public class TenantThreadLocal extends ThreadLocal<String> {
    private final static TenantThreadLocal instance = new TenantThreadLocal();

    public static TenantThreadLocal instance() {
        return instance;
    }
}

En de overschreven klasse met weggelaten constructors.

public class TenantMappingMongoEntityInformation<T, ID extends java.io.Serializable>  extends MappingMongoEntityInformation<T, ID> {

    @Override
    public String getCollectionName() {
        return TenantThreadLocal.instance().get() + super.getCollectionName();
    }
}

Maak vervolgens uw repository:

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);



  1. Hoe ongebruikte indexen in MongoDB te vinden?

  2. Mongodb - null-velden recursief verwijderen?

  3. Hoe is een MongoDB ObjectID 12 bytes?

  4. Documenten zoeken waar een veld zich verhoudt tot een ander in een array