简体   繁体   中英

How to imlement hibernate interceptor in Struts2

在我的Struts2应用程序中,我想使用Hibernate拦截器审核所有CURD操作,请帮助我如何实现。

You can create an interceptor by extending the EmptyInterceptor , read the documentation:

Chapter 12. Interceptors and events

The documentation has an example on how to implement auditing using interceptors.

Also here is another example for similar functionality : Hibernate interceptor example – audit log

You can create XXXDAO class by implementing Interceptor or by extending EmptyInterceptor . If You use Interceptor interface , using below overridden method save the data in separate table.

 public boolean onLoad(Object o, Serializable srlzbl, Object[] os, String[] strings, Type[] types) throws CallbackException {
    throw new UnsupportedOperationException("Not supported yet.");
}

public boolean onFlushDirty(Object o, Serializable srlzbl, Object[] os, Object[] os1, String[] strings, Type[] types) throws CallbackException {
    throw new UnsupportedOperationException("Not supported yet.");
}

public boolean onSave(Object o, Serializable srlzbl, Object[] os, String[] strings, Type[] types) throws CallbackException {
    throw new UnsupportedOperationException("Not supported yet.");
}

public void onDelete(Object o, Serializable srlzbl, Object[] os, String[] strings, Type[] types) throws CallbackException {
    throw new UnsupportedOperationException("Not supported yet.");
}

public void onCollectionRecreate(Object o, Serializable srlzbl) throws CallbackException {
    throw new UnsupportedOperationException("Not supported yet.");
}

public void onCollectionRemove(Object o, Serializable srlzbl) throws CallbackException {
    throw new UnsupportedOperationException("Not supported yet.");
}

public void onCollectionUpdate(Object o, Serializable srlzbl) throws CallbackException {
    throw new UnsupportedOperationException("Not supported yet.");
}

public void preFlush(Iterator itrtr) throws CallbackException {
    throw new UnsupportedOperationException("Not supported yet.");
}

public void postFlush(Iterator itrtr) throws CallbackException {
    throw new UnsupportedOperationException("Not supported yet.");
}

public Boolean isTransient(Object o) {
    throw new UnsupportedOperationException("Not supported yet.");
}

public int[] findDirty(Object o, Serializable srlzbl, Object[] os, Object[] os1, String[] strings, Type[] types) {
    throw new UnsupportedOperationException("Not supported yet.");
}

public Object instantiate(String string, EntityMode em, Serializable srlzbl) throws CallbackException {
    throw new UnsupportedOperationException("Not supported yet.");
}

public String getEntityName(Object o) throws CallbackException {
    throw new UnsupportedOperationException("Not supported yet.");
}

public Object getEntity(String string, Serializable srlzbl) throws CallbackException {
    throw new UnsupportedOperationException("Not supported yet.");
}

public void afterTransactionBegin(Transaction t) {
    throw new UnsupportedOperationException("Not supported yet.");
}

public void beforeTransactionCompletion(Transaction t) {
    throw new UnsupportedOperationException("Not supported yet.");
}

public void afterTransactionCompletion(Transaction t) {
    throw new UnsupportedOperationException("Not supported yet.");
}


public String onPrepareStatement(String string) {
    throw new UnsupportedOperationException("Not supported yet.");
}

If You extends EmptyInterceptor no need to override all the methods, required methods can override in your dao class.

For example I have to store fieldName , fieldValue , fieldType , className in my Audit table, for save() method.

//Audit save Pojo 
public class AuditSave{
  private String className;
  private String fieldName
  private String fieldValue
  private String fieldType
  //setter's and getter's
}
//AuditDAO class
public class AuditDao exteds EmptyInterceptor{

   public boolean onSave(Object o, Serializable srlzbl, Object[] os, String[] strings,
   Type[] types) throws CallbackException {
   Session session = HibernateUtil.getSessionFactory().openSesson();
   String className = o.getClass().getName();
    try{
       Transaction tx = session.beginTransaction();
       for(int i = 0;i < os.length ;i++){
          AuditSave auditSave = new AuditSave();
          auditSave.setClassName(className);
          auditSave.setFieldName((String)strings[i]);
          auditSave.setFieldValue((String)os[i]);
          auditSave.setFieldType(types[i].toString());

          session.save(auditSave);
          tx.commit();
       }catch(Exception e){
          tx.rollback();
          e.printStackTra;
       }
   if(session.isOpen())
          session.close();
   }
       return true;
    }
 // same as update,delete

For delete use onDelete() method, For update use findDirty() method

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM