0

在持久化、更新和删除映射实体之前,我已经制作了触发器来记录操作,但它只在 MySQL 中,所以我认为我必须使用annotations@PostPersist和.@PostUpdate@PostDelete

因此,当实体(例如 Category)被持久化时,会抛出一个将信息插入日志表的方法,使用以下 SQL:

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

我就是这样做的,使用 createNativeQuery 然后 query.executeUpdate() 但什么也没发生。

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

4

2 回答 2

2

您可以使用 EclipseLink 的历史策略轻松记录对实体类型的所有更改:http ://wiki.eclipse.org/EclipseLink/Examples/JPA/History

于 2013-11-26T14:26:42.737 回答
1

假设您是 CDI,您可以创建一个拦截器,如下所述:Oracle 教程 CDI 拦截器

在这个拦截器中,您可以在日志表中创建插入。但请记住,日志记录通常会大大降低应用程序的速度。考虑使用通常只记录错误而不是所有内容的日志级别

于 2013-11-24T21:41:59.357 回答