2015-03-22 2 views
0

Я работаю над приложением с бэкэндом Hibernate. Одна из вещей, которые я хотел бы сделать, - это обработать обработчики асинхронных событий при обновлении объектов объекта JPA. Сложная часть заключается в том, что после обновления объекта JPA больше нет постоянной ссылки на исходный объект.Сохранение всей сущности JPA при каждом изменении

Конечной целью является сохранить первоначальный и обновленный объект таким образом, что асинхронный компонент может увидеть их в полном объеме как . Я могу придумать пару возможных способов обойти это, но все они кажутся мне сложными.

  • Serialize исходный объект, сохранить его в базе данных где-нибудь, и обращаться к нему асинхронно
  • Сериализация обновленный объект, отправить его в виде сообщения JMS, и обновить базу данных асинхронно
  • Создать отдельный аудит объект для отслеживания изменений и воспроизведения их

Есть ли более простой шаблон для такого рода вещей? Или это просто то, что я должен принять на себя?

+4

Не уверен, что если вы уже пробовали JPA PreUpdate и PostUpdate обратные вызовы - просто сохранить состояние вашего объект в каждом. Кроме того, мне кажется, что что-то вроде Hibernate Envers может быть удобно, в этом случае у вас есть журнал с каждым изменением объекта. Http://docs.jboss.org/envers/docs/ – sap1ens

+0

Я знаком с этими обратными вызовами, но как вы «спасаете государство»? Где-то вам нужно сохранить все содержимое предварительно обновленного объекта (отношений и всех) вместе с текущим объектом. Это та часть, для которой я надеюсь, что есть общий шаблон или, возможно, инструмент. – monitorjbl

+1

Для нашей системы мы используем вашу первую идею: «Сериализуйте исходный объект, храните его в базе данных где-то ...» Скажем, у нас есть таблица PERSON_NAME. Когда имя человека изменяется, мы «деактивируем» их имя в таблице с помощью флага и добавляем новую запись имени. Таким образом, мы сохраняем исторические объекты в той же таблице, что и активные объекты, и используем флаг для их дифференциации. Все в порядке. Я не знаю более простой схемы, но я неопытен. Лично я собираюсь поближе познакомиться с Hibernate Envers - спасибо, @ sap1ens. – DavidS

ответ

1

Audit4j поможет сохранить ваши объекты асинхронно. Но он не обеспечит встроенную поддержку изменений объектов JPA. Но может быть способ реализовать с обходным путем.

Смежные вопросы