@MappedSuperclass public abstract class BaseAuditModel extends BaseCrmModel{ /** * UID */ private static final long serialVersionUID = 8886136517524378574L; public abstract String[][] getAuditPropertys(); //需要审计的字段名称 }
@Entity @Table(name = "crm_user") public class UserModel extends BaseAuditModel{ /** * UID */ private static final long serialVersionUID = 1L; private String userName; //用户名 private String mobile; //手机号 private String address; //住址 public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String[][] getAuditPropertys() { //需要审计的字段/解释 return new String[][]{{"userName", "用户名"}, {"mobile","手机号"}, {"address", "住址"}}; } @Override public String getModelName() { return "用户信息"; } }
public class LogEntityInterceptor extends EmptyInterceptor { /** * UID */ private static final long serialVersionUID = 1L; private Logger log = Logger.getLogger(LogEntityInterceptor.class); @Override public void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { log.info("删除数据 onDelete..."); } @Override public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { log.info("保存数据 onSave..."); return false; } @Override public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) { log.info("修改数据 onFlushDirty..." + entity.getClass()); if(entity instanceof BaseAuditModel){ BaseAuditModel audit = (BaseAuditModel) entity; if(audit.getAuditPropertys() != null && previousState != null){ log.info(audit.getModelName()); log.info("id: "+audit.getId()); Map<String, String> map = MapUtils.putAll(new HashMap(), audit.getAuditPropertys()); for(int i=0, len=previousState.length; i<len; i++){ if(previousState[i]!=null && map.get(propertyNames[i]) != null && !previousState[i].equals(currentState[i])){ log.info(propertyNames[i]+"/"+map.get(propertyNames[i])+":原值="+previousState[i]+",新值="+currentState[i]); } } } } return false; } }
<!-- Hibernate审计日志拦截器 --> <bean id="logEntityInterceptor" class="com.hzwealth.app.crm.LogEntityInterceptor" /> <bean id="sessionFactory" ............. > ................ <property name="entityInterceptor" ref="logEntityInterceptor"/> ................ </bean>
相关推荐
博文链接:https://limaofa.iteye.com/blog/212727
hibernate框架日志文件,用于对hibernate框架运行记录日志的;
论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts...
STRUTS2+HIBERNATE分页 实现代码详细的分页实现代码实现代码详细的分页实现代码实现代码详细的分页实现代码实现代码详细的分页实现代码
数据日志:设计中提供数据日志注入接口,管理数据日志注入,业务系统可过基于hibernate Listener 拦截数据表操作,注入数据日志(此为业务系统实现,设计中提供数据日志注入接口),提供 日志管理:通过统一的...
数据日志:设计中提供数据日志注入接口,管理数据日志注入,业务系统可过基于hibernate Listener 拦截数据表操作,注入数据日志(此为业务系统实现,设计中提供数据日志注入接口),提供 日志管理:通过统一的...
Hibernate框架ORM的实现原理.doc
本实例采用struts+hibernate实现注册功能,也就给数据库加入一条记录,其中包括时间字段的添加.
Hibernate日志jar包
试验了很多版本,这套hibernate包算是比较理想的配套包,分别有:antlr-2.7.6.jar ,backport-util-concurrent.jar, commons-collections-3.1.jar, commons-logging-1.1.1.jar,dom4j-1.6.1.jar,ehcache-1.5.0....
hibernate可以实现简单的数据库操作,可以实现简单的数据增加,数据查询,数据修改,数据删除。
Hibernate Many to Many 实现方式
网络硬盘(Struts 2+Hibernate+Spring实现)网络硬盘(Struts 2+Hibernate+Spring实现)网络硬盘(Struts 2+Hibernate+Spring实现)网络硬盘(Struts 2+Hibernate+Spring实现)网络硬盘(Struts 2+Hibernate+Spring...
hibernate方法实现
Hibernate 实现原理 模拟,通过模拟hibernate的实现原理来加深对hibernate实现原理的理解和使用。
用hibernate3实现最简单的查询,主要包含了必要的jar包
使用struts2和hibernate实现登录以及增删改的小案例
Spring+Hibernate实现用户登录程序,可执行,里面配置文件是正确的,在mysql中见一个wangwei数据库,再建个user表就可执行