Всё это выглядит очень здорово и красиво, но как быть, если объём данных большой или данные часто изменяются? Если работа с БД ведётся не только через Hibernate? Не говоря уже о том, что кто-то может влезть и руками поправить данные. Имхо, надёжнее будет сделать через триггеры, хотя переносимость при этом и пострадает.
Во многих промышленных СУБД механизмы трекинга и аудита уже встроены.
А вообще я не нашел упоминаний можно ли писать аудит в другую базу (ее ведь проще обслуживать будет, да и скорость основной базы не будет так сильно страдать)…
Hibernate Envers: аудирование операций