Как хранить HashMap в Hibernate - MySQL - PullRequest
1 голос
/ 07 февраля 2020

Я видел пару похожих тем, но, к сожалению, ни одна из них не решила мою проблему.

Я пишу систему продаж. Есть много поставщиков и покупателей. У каждого поставщика разные цены на разные товары, и то же самое с покупателями.

Сначала я решил это так (но понятия не имею, что делать дальше ..):

public class Buyer {

    //key = type of product, value = price for that product
    private Map<ProductType, Double> productPrices;

public class Order {

    //key = type of product, value = quantity of products
    private Map<ProductType, Double> orderedProducts;

Вот мой сервис для расчета заказа (это не окончательная версия, я заменю возвращаемый тип на какой-то объект вместо «Франкенштейна» ..), так что не пугайтесь.

// key = product type, value = ( quantity, price)
public Map<ProductType, Map<Double, Double>> calculateOrder(Order order, Buyer buyer) {

    AtomicReference<Double> totalSum = new AtomicReference<>((double) 0);
    Map<ProductType, Map<Double, Double>> resultOrder = new HashMap<>();

    order.getOrderedProducts().forEach((type, quantity) -> {
        double price = buyer.getProductPrices().get(type);
        double sum = quantity * price;

        resultOrder.put(type, new HashMap<>());
        resultOrder.get(type).put(quantity, sum);

        totalSum.updateAndGet(v1 -> v1 + sum);
    });

    return resultOrder;
}

Более того: цены на товары будут меняться очень часто для каждого покупателя / поставщика.

Итак, вопрос в том, как поместить эти карты в базу данных. Конечно, с сохранением чистого кода без каких-либо «Франкенштейнов» и легким доступом ко всем данным?

Я буду очень признателен за любую помощь!

PS. Чтобы упростить задачу, я удалил бесполезные атрибуты сущностей, чтобы сосредоточиться только на персонале, что важно для этой проблемы.

PS2. Да, я заменю double на BigDecimal, просто сейчас для более простого расчета я использую double.

...