2014-11-04 130 views

回答

0

您可以通过实现拦截器或延长EmptyInterceptor创建XXXDAO类。 如果使用Interceptor接口,则使用下面的重写方法将数据保存在单独的表中。

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."); 
} 

如果您扩展EmptyInterceptor不需要重写所有的方法,所需的方法可以在DAO类中重写。

比如我有存储fieldNamefieldValuefieldTypeclassName在我的审计表中,save()方法。

//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 

对于删除使用onDelete()方法, 对于更新使用findDirty()方法