Comments 18
А зачем оставлять удалённых пользователей в той же таблице, в которой хранятся активные? В чём смысл? Почему их не копировать в отдельную таблицу?
Потому что автор молод, горяч и не вкусил всех прелестей и никому ненужных приседаний на ровном месте с soft-delete-ом.
И не читал вот эту статью: https://habr.com/ru/companies/haulmont/articles/579386/.
Да, хороший разбор. И как верно заметил @corporaldev в комментариях к ней
Есть два типа людей: те, которые думают, что soft-delete - это генианльно и те, которые его уже выпилили из проекта.
У нас записи удалённые остаются в бд чисто чтобы посмотреть что удалено и кто удалил (в рамках статьи). Поэтому нас часть проблем не касается.
Если при удалении копировать запись в другую таблицу. В бд всегда найдётся куча данных, на которые ссылалась запись, придётся эти записи копировать в новую таблицу. Проще сразу использовать envers При мягком удалении не нарушается консистентность данных и нет необходимости создавать новую таблицу для каждой сущности.
https://hibernate.org/orm/envers/
Чем не подошел?
Не было задачи хранить всю историю изменений сущности, только кто создал/изменил/удалил.
Отдельно таблицу заводить скажем под 10 сущностей = + 10 таблиц. И в случае чего это дополнительный join
Зачем данные о пользователях хранить в сущности? ID недостаточно?
Мне хотелось полностью делегировать это приложению, но погуглив, я не нашёл какого-то явного решения.
Вроде есть какой-то аудит из коробки https://docs.spring.io/spring-data-jpa/reference/auditing.html
Идентификатор пользователя не информативно
Конечно есть! Вот тут за 2 мин показано как оно работает https://www.youtube.com/watch?v=1D5zEzLX1iY.
Аудит пользователей Spring Data JPA