使用 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 使用指南 /Eclipselink/JPA 实体生成器
JPA - 使用 EclipseLink 保持单向一对多关系失败