Я думал просто удалить старые и заново создать их из входящего XML. Тем не менее, выполнение сохраняется, когда у моих сущностей, имеющих существующие идентификаторы, кажется, что Hibernate очень рассержен ..
Действительно, вы не можете назначить Id
, когда он должен быть сгенерирован, по крайней мере, не в Hibernate, который не будет рассматривать сущность как new , но как detached ( Спецификация JPA немного размыта в отношении точных правил в этом случае, но именно так Hibernate ведет себя, см. 5.1.4.5. Присвоенные идентификаторы для дополнительных подсказок).
Так возможно ли это на самом деле или лучше не удалять их и просто пытаться сделать это слиянием?
Чтобы сделать возможным удаление / вставку для варианта использования веб-службы, вам необходимо:
- не назначать идентификатор ~ или ~
- использовать специальную версию сущности без сгенерированного идентификатора ~ или ~
- использование массовых операций (?)
Альтернативой, если вы на самом деле обновляете отсоединенные сущности, будет действительно использовать merge
(но взгляните на эти предыдущие вопросы просто в случае).
Какой подход лучше? Я не знаю, думаю, это зависит от ваших потребностей. Последнее кажется более естественным, если вы обновляете существующие объекты. В первом случае вы действительно получите «новые» объекты (включая новое значение для столбца оптимистической блокировки). В зависимости от точной реализации процесса производительность также может отличаться. И, кстати, как насчет параллелизма (просто чтобы упомянуть, я действительно не ожидаю ответа)?