Как проводить аудит JPA без Hibernate Envers

Мне нужно создать модуль аудита для моего веб-приложения 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?

Если бы кто-нибудь мог указать мне правильное направление, я был бы признателен!

12
задан André 13 October 2011 в 14:09
поделиться