Здравствуйте, насколько я понимаю, после jpa есть только один способ удалить отсоединенный объект:
factory.withTransaction((session, transaction) ->
session.merge(sampleEntity).invokeUni(session::remove)
).await().indefinitely();
Все в порядке, но если речь идет о производительности, операция слияния занимает много времени и может вызвать реальные проблемы с производительностью. Например, согласно моим неточным измерениям времени, удаление 5000 объектов занимает ~ 4 секунды, в спящем режиме - 50 мс.
Я только что прочитал о новом методе под названием session.getReference
который возвращает постоянный экземпляр данной сущности. Можно ли разрешить его использование за session.remove
?
Я только что прочитал о новом методе под названием
session.getReference
который возвращает постоянный экземпляр данной сущности. Можно ли разрешить его использование заsession.remove
?
Ах, хороший момент, безусловно, вы должны уметь это делать. Я заставил это работать в # 360.
Однако я хочу, чтобы вы понимали, что нет способа remove()
объект, не получив его предварительно. Это потому, что remove()
имеет семантику, такую как каскадное удаление и удаление коллекции, которые зависят от состояния объекта в сеансе.
Если вам абсолютно необходимо иметь возможность удалить объект, не извлекая его, вы должны использовать StatelessSession.delete()
или запрос HQL delete
.
@ Xset-s PS спасибо, что сообщили об этом, это была большая оплошность с моей стороны
Нет проблем, спасибо за подробный ответ об операции удаления и за очень быстрое исправление. Прямо сейчас я провожу эксперименты и переписываю свое серверное приложение, используя вашу новую замечательную библиотеку, поэтому мне легко обнаружить некоторые хитрые проблемы, которые можно было бы зафиксировать только так (или используя большое количество тестов 😄)