使用 JPA 2.1、EclipseLink、JSF 2.0 的日志表

Posted

技术标签:

【中文标题】使用 JPA 2.1、EclipseLink、JSF 2.0 的日志表【英文标题】:Log table using JPA 2.1, EclipseLink, JSF 2.0 【发布时间】:2013-11-24 19:27:50 【问题描述】:

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

所以,当实体例如类别被持久化,一个将信息插入日志表的方法被抛出,使用以下 SQL:

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

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

以上是关于使用 JPA 2.1、EclipseLink、JSF 2.0 的日志表的主要内容,如果未能解决你的问题,请参考以下文章

jpa 2.1 的生产就绪持久性提供程序

JPA 使用指南 /Eclipselink/JPA 实体生成器

JPA - EclipseLink - 如何更改默认模式

JPA - 使用 EclipseLink 保持单向一对多关系失败

JPA + EclipseLink+ HSQLDB 不创建表

JPA 从 EclipseLink 到哪个提供商?