Мой вопрос похож на
Обновление одного поля в сущности JPA
В основном у меня есть сущность Foo, которая имеет несколько основных полей (enum
, String
, DateTime
) и имеет два других поля.Один из них - OneToOne, а другой - OneToMany, реализованный с использованием коллекции.
У меня есть два работающих потока, и в разное время я буду искать одну и ту же сущность, используя метод типа findById в классе-оболочке Singleton EntityManager (я этого не писал;)
Что яхотелось бы избежать следующей ситуации:
Поток 1 ищет Foo с идентификатором 1 и получает ссылку на Foo с состоянием Foo на тот момент времени.
Поток 2 ищет Foo с идентификатором 1 и получает ссылку на Foo с тем же состоянием, что и у потока 1
Поток 1 изменяет поле String в Foo и сохраняет его с объединением. Поток 2 изменяетзначение поля Enum для foo и сохраняет его с помощью слияния
Последняя операция приводит к тому, что поток изменений 1 заменяется старым состоянием поля String, полученного потоком 2, поскольку слияние обновляет все (кромеOneToOne и OneToMany, так как их CascadeType является Persist and Remove).
Я ищу предложение о том, что лучшепрактический подход заключается в предотвращении такого сгущения состояния, когда нужно только обновить определенные поля таким образом.
Один, хотя у меня был, который я думаю, это то, что упоминается в ссылке в верхней части моего сообщения, должен был изменить вещи, используя общий save(Object o)
, который он использует сейчас, который выполняет слияние с чем-то специфичным для этого случая, который выполняет ОБНОВЛЕНИЕ для определенного поля, введенного из идентификатора объекта.Есть ли способ лучше?Мой текущий поставщик постоянства - EclipseLink.
TIA
-NBW