2013-11-24 133 views
0

我已經在持久化,更新和刪除映射實體之前做了觸發器來記錄動作,但它只在MySQL內部,所以我認爲我必須做一個「應用程序級觸發器」使用註釋@PostPersist@PostUpdate@PostDelete日誌表使用JPA 2.1,EclipseLink,JSF 2.0

因此,當實體例如類別獲取持續,用於將信息記錄到日誌表的方法拋出,用下面的SQL:

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

我做了完全一樣的,使用createNativeQuery然後query.executeUpdate(),但什麼都沒有發生。

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

回答

1

假設你是CDI,你可以像在描述創建一個攔截器:Oracle Tutorial CDI Interceptor

在這個攔截器,您可以創建在日誌表中插入。 但請記住,日誌記錄通常會降低應用程序的速度。考慮使用的EclipseLink的歷史政策使用您通常只需登錄,而不是一切

+0

謝謝! 我可以使攔截器異步提高性能。 – rsb2097