2013-11-24 54 views
0

我已经在持久化,更新和删除映射实体之前做了触发器来记录动作,但它只在MySQL内部,所以我认为我必须做一个“应用程序级触发器”使用注释@PostPersist@PostUpdate@PostDelete日志表使用JPA 2.1,EclipseLink,JSF 2.0

因此,当实体例如类别获取持续,用于将信息记录到日志表的方法抛出,用下面的SQL:

INSERT INTO log (date_hour, table, id_tuple, user) 
VALUES (NOW(), 'category', " + id + ", '" + 
FacesContext.getCurrentInstance().getExternalContext().getRemoteUser() + "')"; 

我做了完全一样的,使用createNativeQuery然后query.executeUpdate(),但什么都没有发生。

什么是做我想做的最好的方法?提醒我正在使用EclipseLink。

回答

1

假设你是CDI,你可以像在描述创建一个拦截器:Oracle Tutorial CDI Interceptor

在这个拦截器,您可以创建在日志表中插入。 但请记住,日志记录通常会降低应用程序的速度。考虑使用的EclipseLink的历史政策使用您通常只需登录,而不是一切

+0

谢谢! 我可以使拦截器异步提高性能。 – rsb2097