cron – taxClassId is not stored with the rest of the product

I'm trying to update some attributes of my product with a cron to avoid common mistakes. The code that causes problems runs in a loop:

foreach ($ storeIds as $ storeId) {
$ this-> storeEmulation-> startEnvironmentEmulation ($ storeId);
$ fixed = $ this-> doExecute ($ storeId);
$ this-> storeEmulation-> stopEnvironmentEmulation ();
}

The code "doExecute method" is simplified here. Tests are performed beforehand to prevent a product from being stored for free. How to save a product:

$ searchCriteria = $ this-> searchCriteriaBuilder-> create ();
$ products = $ this-> productRepository-> getList ($ searchCriteria) -> getItems ();

// [...]

foreach ($ products as $ product) {

// [...]

    $ fixes[] = ['visibility' => ['from' => $product->getVisibility(), 'to' => $expectedVisibility]];
$ product-> setStatus ($ expectedVisibility);

$ fixes[] = ['taxClassId' => ['from' => $product->getTaxClassId(), 'to' => $expectedTaxClassId]];
$ product-> setTaxClassId ($ expectedTaxClassId);

To attempt {
$ this-> productRepository-> save ($ product);
$ this-> logger-> notice (& # 39; A product has been fixed & # 39;), [
            'sku' => $product->getSku(),
            'storeId' => $store->getId(),
            'fixes' => $fixes
        ]);
} catch ( Exception $ e) {
$ this-> logger-> error (& # 39; a product can not be fixed & # 39;), [
            'sku' => $product->getSku(),
            'storeId' => $store->getId(),
            'fixes' => $fixes
        ]);
}
}

I can see in the logs that visibility is fixed on first call. The taxClassId does not change though:

[2019-03-15 22:49:57]    FixerLogger.NOTICE: Fixed a product {"sku": "107", "storeId": "8", "fixes":[{"taxClassId":{"from":"0","to":"2"}}]} []
[2019-03-15 22:49:58]    FixerLogger.NOTICE: A product has been fixed {"sku": "018-K", "storeId": "8", "fixes":[{"visibility":{"from":"2","to":1}},{"taxClassId":{"from":"8","to":"2"}}]} []
[2019-03-15 22:49:58]    FixerLogger.NOTICE: Fixed one product {"sku": "109-K", "storeId": "8", "fixes":[{"taxClassId":{"from":"8","to":"2"}}]} []

[2019-03-15 22:50:27]    FixerLogger.NOTICE: Fixed a product {"sku": "107", "storeId": "8", "fixes":[{"taxClassId":{"from":"0","to":"2"}}]} []
[2019-03-15 22:50:27]    FixerLogger.NOTICE: A product has been fixed {"sku": "018-K", "storeId": "8", "fixes":[{"taxClassId":{"from":"8","to":"2"}}]} []
[2019-03-15 22:50:28]    FixerLogger.NOTICE: Fixed one product {"sku": "109-K", "storeId": "8", "fixes":[{"taxClassId":{"from":"8","to":"2"}}]} []

Any idea, where am I wrong?

Thanks for your help!