Мне нужно сделать модуль аудита для моего веб-приложения Java. Я использую EclipseLink, а не Hibernate (не могу использовать Envers). Я много искал, чтобы получить SQL или JPQL, которые выполняет JPA, поэтому я мог бы записывать что-то вроде этого:
System.out.println("User " + user + " from " + ip_address + " executed " + jpa_statement + " at " + new Date());
Собственно, я сохраню эту информацию в таблице базы данных истории. Поэтому я могу легко получить эту информацию в любое время. Поэтому для меня недостаточно параметров SHOW SQL. Мне действительно нужна строка SQL, поэтому я могу манипулировать ею в своем исходном коде.
Я нашел в JPA спецификацию EntityListener и подумал, что это идеальное место для размещения моего регистрационного кода. Например, метод postUpdate может регистрировать время обновления объекта. Но моя проблема в том, что я не могу выполнить SQL-код.
Вот пример того, что я имею в виду:
public class AuditListener {
@PostUpdate
public void postUpdate(Object object) {
User user = (User)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user");
String ip_address = (User)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("ip_address");
String jpa_statement = object.getSQL();
System.out.println("User " + user + " from " + ip_address + " executed " + jpa_statement + " at " + new Date());
}
}
Но "object.getSQL()" не существует. Итак, как я могу получить инструкцию SQL?
Если бы кто-нибудь мог указать мне в правильном направлении, я был бы признателен!