我已經實現了一個事件偵聽器,用於對我的實體進行審計操作。例如,我爲PreInsertEventListener創建了一個名爲HibernatePreInsert的實例。另外,通過閱讀stackoverflow,我配置了一個名爲HibernateIntegrator的Integrator。由於我使用Hibernate 4和Spring 4,因此我在META-INF/services下創建了一個名爲com.dacasals.raspertwo.interceptors.HibernateInterceptor的文件,並在那裏添加了集成器類,正如網絡上推薦的那樣。但是當我運行我的應用程序並插入一個新元素時,什麼也沒有發生,甚至沒有顯示我的HibernatePrePersist的消息。這是我第一次嘗試Hibernate EventListeners,我不知道可能會出錯。事件監聽器不在Hibernate上工作?
這裏是和例子涉及我的問題類,也文件結構:
監聽器:
public class HibernatePreInsert implements PreInsertEventListener{
private static final long serialVersionUID = 1L;
static final Logger logger = LoggerFactory.getLogger(HibernatePreInsert.class);
@Override
public boolean onPreInsert(PreInsertEvent event) {
if(event.getEntity() instanceof Person){
//display a message to know if this works or not
logger.info("It works");
}
return false;
}
}
積分:
public class HibernateIntegrator implements Integrator{
public void integrate(Configuration configuration, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry){
final EventListenerRegistry registry = serviceRegistry.getService(EventListenerRegistry.class);
HibernatePreInsert listener = new HibernatePreInsert();
registry.prependListeners(EventType.PRE_INSERT, listener);
}
@Override
public void integrate(Metadata metadata, SessionFactoryImplementor sessionFactory,
SessionFactoryServiceRegistry serviceRegistry) {
// TODO Auto-generated method stub
}
@Override
public void disintegrate(SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) {
// TODO Auto-generated method stub
}
}
文件com.dacasals .raspertwo.interceptors.HibernateInterceptor:
com.dacasals.raspertwo.interceptors.HibernateInterceptor
在此先感謝。
編輯: 我在寫作時犯了一個錯誤。我正在使用休眠5,而不是4.
你的聽衆的目標是什麼?你想要在實體本身上設置值還是想要在另一個表中插入一行? – Naros
我想在我的數據庫中存儲有關執行事件的信息。例如,如果插入新的Person,我想保存執行的操作的時間戳。我試圖在onPreInsert方法上做這個簡單的例子,但沒有發生任何事情,然後我顯示一條消息,並意識到什麼都沒有發生。 – Ethan
我假設你只是用Hibernate 4導入'hibernate-core'依賴項,而不是使用'hibernate-entitymanager'依賴項並使用'SessionFactory'。這是一個正確的假設嗎? – Naros