标签: show-sql

如何在没有Hibernate Envers的情况下审核JPA

我需要为我的Java Web App 制作一个审计模块.我使用EclipseLink,而不是Hibernate(不能使用Envers).我搜索了很多方法来获取JPA正在执行的SQL或JPQL,所以我可以记录这样的事情:

System.out.println("User " + user + " from " + ip_address + " executed " + jpa_statement + " at " + new Date());
Run Code Online (Sandbox Code Playgroud)

实际上,我会将此信息保存到历史数据库的表中.因此,我可以随时轻松检索此信息.这就是为什么" SHOW SQL "参数对我来说还不够.我真的需要SQL字符串,所以我可以在我的源代码中操作它.

我在JPA spec中找到了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 " + …
Run Code Online (Sandbox Code Playgroud)

audit jpa eclipselink entitylisteners show-sql

12
推荐指数
2
解决办法
8135
查看次数

标签 统计

audit ×1

eclipselink ×1

entitylisteners ×1

jpa ×1

show-sql ×1