При обновлении поля JPA сущности оно не обновляется, а в нем оказывается старое значение

У меня очень странное поведение программы.

Предметная область стоит из комбо в ресторане, товаров и блюд. Данные комбо надо отобразить на фронте. В сущности комбо хранится массив товаров (goods) и блюд (products). У каждого товара или блюда есть поле count, в котором указано, в каком количестве товар или блюдо добавлено в комбо. Кроме того, в самой сущности комбо есть поле counts со счетчиками: эти счетчики указывают, в каком количестве товар или блюдо добавлены в комбо и содержит такие поля как id (идентификатор блюда или товара) и count (количество этого блюда или товара).

У меня проблема с заполнением поля products.count и goods.count, эти данные надо отдавать на фронт. Дело в том, что товары и блюда вместе с полем count хранятся в базе и получается так, что для одного товара (который может быть включен в разные комбо) указан счетчик, какой он был в последнем созданном комбо, а предыдущие значения счетчика затираются. А надо отдавать на фронт актуальное значение этого счетчика.

Для этого я написал такой код:

for (Combo combo : comboService.findByCli(us.getClientLegalInformation().getId())) {
            if (combo.getId() == 10145)
            {
                System.out.println("break");
            }

            var counts = combo.getCounts().stream().collect(toMap(Count::getId, Count::getCount, (a, b) -> a));

            combo.getProducts().forEach(it -> {
                if (counts.containsKey(it.getId()))
                {
                    it.setCount(Long.valueOf(counts.get(it.getId())));
                }
            });

            combo.getGoods().forEach(it -> {
                if (counts.containsKey(it.getId()))
                {
                    it.setCount(Long.valueOf(counts.get(it.getId())));
                }
            });

            list.add(combo);
        }

Я извлекаю список комбо из сервиса (из JPA репозитория) и прохожу по ним в цикле. Для каждого комбо я создаю мапу, которая идентификатору товара или блюда ставит в соответствие его количество в этом комбо. Далее прохожу по спискам товаров и блюд и у каждого товара или блюда заполняю поле count из этой мапы.

Перед добавлением обновленного комбо в список list значения счетчиков правильные. Но перед возвращением списка list из апи на фронт оказывается, что у товаров и блюд оказался старый счетчик! Как будто я его не менял! Хотя я сделал это.

Почему программа так себя ведет? Может быть дело в том, что на фронт мы отправляем @Entity, а не DTO, а энтити управляется хибернейтом и находится в кэше. Может это хибернейт не дает обновить товарам и блюдам поле count?

Подскажите, пожалуйста, это какая-то мистика.

Дополнение. Значение в предыдущем элементе списка почему-то заменяется при обработке товаров текущего элемента списка

combo.getGoods().forEach(it -> {
                if (counts.containsKey(it.getId()))
                {
                    it.setCount(Long.valueOf(counts.get(it.getId())));
                }
            });

Ответы (0 шт):