Hibernate的Event-listener业务审计日志的一个思路

本文探讨了使用Hibernate进行日志审计的挑战,特别是针对逻辑删除的情况。作者尝试通过自定义事件和监听器来解决这一问题,并提出了一个混合解决方案。

        需要实现一个日志审计的功能,从JE上看到了一个帖子,列举了六种方案(帖子的名字叫《JPA + Hibernate 3 CRUD操作历史审计日志的解决方案(附源码)》),这次刚好用的是hibernate做持久化,就选择了event-listener的方式。但是需要进行日志记录的数据,都是没有在前端提供物理删除逻辑的,用的全是置状态的逻辑删除。

示例伪代码如下:

String hql ="update test.Demo set flag := flag where id := id ";
Query query = getSession().createQuery(hql)
      .setParameter("flag",DELETE) //DELETE 表示删除状态
      .setParameter("id","1001");
int rows = query.executeUpdate();

 然后问题出现了:hibernate无法将逻辑删除的日志记录下来。大概看了一下相关的实现代码,QueryImpl.java应该是调用的SessionImpl.java,而SessionImpl.java的该方法实现是这样的:

public int executeUpdate(String query, QueryParameters queryParameters) throws HibernateException {
		errorIfClosed();
		checkTransactionSynchStatus();
		queryParameters.validateParameters();
		HQLQueryPlan plan = getHQLQueryPlan( query, false );
		autoFlushIfRequired( plan.getQuerySpaces() );

		boolean success = false;
		int result = 0;
		try {
			result = plan.performExecuteUpdate( queryParameters, this );
			success = true;
		}
		finally {
			afterOperation(success);
		}
		return result;
	}

 又看了一些save/update的一些方法,都和Listener相关,那Event-Listener应该是做在SessionImpl类中的。

再大胆猜测一下,和Query相关的应该是HQLQueryPlan.java,Query都没有事件监听器(注:我没有验证是不是这样),想想也合理,从Hibernate的逻辑上讲无法实现对不加任何假设条件的Query的监听。

     但是我需要的是一个完整的实现日志审计的方案,总不能对Query的单个对象的修改,物理删除,逻辑删除(修改)就不做日志吧!业务级需要的特殊需求,肯定应该业务级自己实现的,但是在网上没有发现相关的实现思路和示例。没有成熟的借鉴就只好自己先搞一个思路:

1 定义自己的事件和监听;

2 抽取Query方式的单个对象修改,单个对象逻辑删除,单个对象物理删除的方法成通用方法,放在一个基础类中;

3 在抽取的方法上中,添加上监听器方法调用,

4 实现自己的监听,并把实现的类实例,注入到存在通用方法的基础类;

5 实现单对象修改、单对象逻辑删除或物理删除时需要调用基础类中的对应方法;

      现在的日志审计应该是基本一致了。一半是用Hibernate本身的机制实现的,一半是借鉴其思想根据具体业务逻辑自定义监听器和事件实现的。构成相对一个完整的业务日志审计功能。

       先试试吧,希望能发现更好一点儿的方式......

 

特等奖标准成品论文(Word无水印纯净版) 硬核结构:全文包含完整的摘要、问题重述与分析、模型假设、符号说明、模型建立与求解、灵敏度分析及结论。 即插即用:排版严格遵循官方规范,逻辑严密。拿到手即可作为绝佳的高分参考模板,稍作替换与个性化润色即可极速完稿,彻底解决写论文难的痛点。 双源硬核解题代码(Python与MATLAB双版本) 拒绝假代码:提供底层逻辑清晰、模块化设计的全套可运行源码。 全流程覆盖:涵盖从前期数据清洗预处理,到中期核心数学模型训练,再到后期启发式算法寻优。 傻瓜式运行:代码自带详尽的逐行中文注释,并支持一键生成高质量结果可视化图表,编程小白也能轻松复现与二次开发。 全量数据与结果展示表 所有中间处理数据、模型输出参数以及最终结论,均已精细整理成高质量表格。直观呈现性能评估指标与多模型对比分析,可直接作为论文正文或附件使用,极大提升学术说服力。 独家硬核思路解析 深入浅出剖析出题人意图,详细拆解每一小问的数学本质与底层逻辑,让你不仅知其然更知其所以然。 【四大核心产品优势】 高效实用:所有代码与论文均经过严格测试,确保结果精准无误、完全可复现,省去熬夜试错的时间。 全栈覆盖:从思路分析到跑出结果,再到写出高质量论文,提供一站式全流程资料矩阵。 排版辅助:资料内提供专业的论文排版一键转换工具与官方标准模板,告别格式调整的繁琐。 持续迭代:网盘直发,开赛后资料库将持续滚动更新,所有用户均可免费同步获取最新包。 【适用人群】 想要打破建模瓶颈的参赛队长与主攻手;急需高质量底层代码的编程小白;目标直指特等奖需要高分模板对标的精英团队。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值