Hibernate лучшие практики для извлечения сущностей - PullRequest
0 голосов
/ 02 января 2019

1) При извлечении сущностей из спящего режима я всегда закрываю сеанс после извлечения, и часто мне нужно извлекать одни и те же сущности, но в разное время (разные сеансы)

И затем мне нужно выполнить некоторые операции с извлеченными объектами, и у меня возникают некоторые проблемы с обновлением, поскольку я выполняю различные операции над различными объектами (которые в базе данных абсолютно одинаковы)

Есть ли хорошие практики, чтобы избежать такой проблемы?

2) - При обновлении сущностей из программного обеспечения, работающего в сети, часто два разных компьютера выполняют разные операции над одними и теми же сущностями (одинаковыми в базе данных), но при обновлении все будет повреждено.

Например, рассмотрим факт обновления количества товара после продажи. После продажи количество продукта должно быть меньше, чем было, но как только 2 разных компьютера совершат продажу предварительно приобретенного продукта, они, несомненно, будут иметь неправильное значение в базе данных, так как я обновляю продукт с помощью jpa update ( ) функция.

Есть ли хорошие практики и для таких проблем?

Спасибо и извините, если это слишком абстрактно и неясно.

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Я закончил тем, что обновил сущности, используя собственные запросы HQL (для тех, кто столкнулся с той же проблемой), а затем снова выбрал сущности (снова выполняя запрос на выборку) после завершения обновления.

0 голосов
/ 11 января 2019

На 1) вы не должны этого делать, не ожидая проблем с параллелизмом при обновлении информации об объектах.

На 2), вы можете использовать две стратегии для решения: Оптимистическая блокировка или Пессимистическая блокировка .Поддержка Hibernate обе стратегии .

Нет правильного ответа на ваш вопрос.Но если бы хотелось только предотвратить проблему, оптимистическая блокировка кажется хорошим решением.Когда два компьютера попытаются обновить поле, последний, записавший количество в базу данных, получит сообщение об ошибке, и транзакция будет отменена.

...