У меня есть объект (представляющий музыкальный файл), который я храню в Hibernate. Пользователь может изменить атрибуты объекта, и в какой-то момент внесенные изменения могут быть сохранены обратно в исходный файл. Но в любой момент времени, прежде чем они сохранят изменения в файле, я хотел бы видеть различия между сущностью, которую я первоначально загрузил, и любыми изменениями, внесенными с тех пор, я хочу, чтобы эти различия были сохранены в базе данных, а не в классе, представляющем сущность потому что главная причина, по которой я использую Hibernate, - минимизировать использование памяти. В противном случае мое использование памяти может быть высоким, так как в приложении могут быть тысячи объектов.
Так что, кажется, самое простое решение - сохранить сущность дважды, причем одна из них - это копия только для чтения, на которую я просто ссылаюсь для сравнения различий, но как правильно это сделать?
РЕДАКТИРОВАТЬ: Итак, я предложил ниже решение, которое работает для меня в том, что, когда я прихожу к сохранению изменений, я вижу, что изменилось, но теперь я хочу сделать еще один шаг в двух направлениях. Когда я загружаю файл в следующий раз, когда я запускаю программу, я хочу проверить, находится ли файл в базе данных с такой же / более поздней датой изменения, поэтому я использую запись в базе данных, а не анализирую файл снова, поэтому моя идея была положить содержание отредактировано в оригинал. Но также я хотел бы дать пользователю возможность откатить изменения, в этом случае мне нужно сохранить оригинал.
Так что теперь, думая, что приведенный ниже ответ о добавлении дат и логического поля сущности песни может иметь больше смысла, позволяя пользователю откатиться до любой версии, которая ему нравится, поэтому я все равно оставлю SongParent и затем буду иметь отношение @oneToMany на песню
В качестве альтернативы, я только что нашел проект http://www.jboss.org/envers, это может быть то, что мне нужно