Mysql 使用JPA2.1、EclipseLink和JSF2.0的日志表

Mysql 使用JPA2.1、EclipseLink和JSF2.0的日志表,mysql,logging,jsf-2,eclipselink,jpa-2.1,Mysql,Logging,Jsf 2,Eclipselink,Jpa 2.1,在持久化、更新和删除映射实体之前,我已经创建了触发器来记录操作,但它只在MySQL中,所以我认为我必须使用注释@PostPersist,@PostUpdate和@PostDelete来执行“应用程序级触发器” 因此,当实体(如Category)被持久化时,将抛出一个将信息插入日志表的方法,使用以下SQL: INSERT INTO log (date_hour, table, id_tuple, user) VALUES (NOW(), 'category', " + id + ", '" +

在持久化、更新和删除映射实体之前,我已经创建了触发器来记录操作,但它只在MySQL中,所以我认为我必须使用注释
@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。

假设您是CDI,您可以创建一个拦截器,如中所述:

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

< p>的日志级别,假设您是CDI,可以创建一个截获器,如在

中描述的那样。 在这个拦截器中,您可以在日志表中创建insert。
但请记住,日志记录通常会大大降低应用程序的速度。考虑使用通常只记录错误而不是一切

< p>的日志级别,假设您是CDI,可以创建一个截获器,如在

中描述的那样。 在这个拦截器中,您可以在日志表中创建insert。
但请记住,日志记录通常会大大降低应用程序的速度。考虑使用通常只记录错误而不是一切

< p>的日志级别,假设您是CDI,可以创建一个截获器,如在

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

< p>您可以使用Eclipse的历史策略将所有更改日志记录到一个实体上:

,您可以使用Eclipse的历史策略将所有更改记录到一个实体类型中:几乎不费力:

您可以用一个小的日志记录所有更改到一个实体类型。努力使用EclipseLink的历史策略:

您可以使用EclipseLink的历史策略记录对实体类型的所有更改:

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