Mysql 使用JPA2.1、EclipseLink和JSF2.0的日志表
在持久化、更新和删除映射实体之前,我已经创建了触发器来记录操作,但它只在MySQL中,所以我认为我必须使用注释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 + ", '" +
@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的历史策略记录对实体类型的所有更改:谢谢!我可以使拦截器异步以提高性能。谢谢!我可以使拦截器异步以提高性能。谢谢!我可以使拦截器异步以提高性能。谢谢!我可以使拦截器异步以提高性能。