У меня есть приложение с gui и список акций, которые сохраняются в db. Я использую 1 EntityManager все время, когда приложение работает, для удаления, изменения и добавления новых акций. У меня есть поток, который периодически захватывает фактические курсы акций запасов и сохраняет их в дБ. Я использую другой менеджер сущности в потоке (причина безопасности потока).Слияние() в многопоточном приложении JPA
Это означает, что для каждой операции, которую я делаю на складе (например, удаление, изменение, просмотр курсов акций), мне нужно сначала вызвать merge, потому что главный менеджер объекта не знает курсы акций, добавленные другим. Проблема заключается в том, что если программа работает долгое время, и пользователь никогда ничего не сделал с запасом, будут тысячи новых курсов, которые должны сначала объединиться, что займет очень много времени (> 10 секунд). Что я могу сделать по этому поводу? Или я делаю это неправильно, и есть лучший способ?
Edit: Это в основном то, что я делаю каждые 5 минут в моей теме:
// grabbing the actual stockprice and making actualStockPrice with it
....
// adding the correct stock to the new stockprice
actualStockPrice.setStock(stock);
// adding stockprice to stock
stock.getActualStockPrices().add(actualStockPrice);
// Saving new price to db (stockPriceModel has it's own em)
stockPriceModel.saveActualStockPrice(actualStockPrice);
saveActualStockPrice в stockPriceModel:
transaction.commit();
transaction.begin();
em.persist(actualStockPrice);
Причина я использую другую EntityManager в моем потоке, то в остальной части мое приложение у меня теперь есть данные (а именно все фондовыецены, которые поток, сохраненный в db) в моем db, мой главный em не знает, что мне нужно вызвать merge(), прежде чем я что-нибудь сделаю с данными. Если я не сделаю этого, мой em попытается снова вставить новые StockPrices, как только я зафиксирую() что-то с ним. Проблема в том, что если я не буду что-то совершать в течение долгого времени, будет так много отброшенных запасов (скажем, несколько тысяч), что слияние() займет целую вечность. И теперь я понятия не имею, что делать.
Пожалуйста, отправьте примеры кода, чтобы проиллюстрировать вашу модель сущности, вместе с которой оператор является медленным, и некоторые примеры SQL-запросов, которые приводят к результату – wrschneider