Как реализовать таблицу истории с чистым JPA? - PullRequest
1 голос
/ 22 апреля 2011

Мне нужно сохранить изменение одного "entity_name" в другую таблицу журналов с именем "entity_name_history" без использования какого-либо провайдера JPA (мне нужно изменить существующий проект, который его не использует). Что я хочу знать, так это в любом случае реализовать историю в чистом JPA.

Я искал некоторый постоянный перехват событий, такой как @postUpdate, но из того, что я знаю, я не могу использовать entitymanager в этих обратных вызовах, если он может сообщить мне.

Ответы [ 3 ]

1 голос
/ 22 апреля 2011

Существует множество литературы по этому предмету, хотя ее обычно называют «проверкой сущностей». Hibernate предоставляет модуль под названием Hibernate Envers , специально созданный для этого и, очевидно, использующий триггеры JPA такого типа.

Существует также (хороший?) Учебник по , реализующий его с помощью TopLink (теперь EclipseLink).

Итак, да, это способ сделать, но нет, вы не должны делать это самостоятельно.

1 голос
/ 22 апреля 2011

Самое простое и чистое решение - использовать триггеры базы данных для реализации функции истории.

0 голосов
/ 22 апреля 2011

Я думаю, что это можно использовать, просто это нужно использовать с осторожностью.Вот цитата из спецификации JPA:

Как правило, переносимые приложения не должны вызывать операции EntityManager или Query, получать доступ к другим экземплярам сущности или изменять отношения в методе обратного вызова жизненного цикла.

В качестве альтернативы вы можете использовать другой диспетчер сущностей или использовать чистое соединение с источником данных JDBC, которое будет находиться в одной транзакции.Особенно, если вам не нужно манипулировать объектами истории в одном сеансе JPA.

...