Hibernate EventListener 中写操作日志

[size=x-large]开[/size]博了,这可不容易,虽然注册有一段时间了,从Javaeye中也学了好多东西,但自己写博客还是头一篇,这可不大好,呵呵,太久了。如果不是自己的经历写在这里,好像也没什么意思,所以一直都不想写。好不容易好像心血来潮,感觉每天都有点小收获,我就在想,如果每天都记录下来,也是个不少的收获耶。好了,废话不多说。我们开始主题(实际上,我兴奋得,我也不知道我在说什么)。

最近,在设计一个需求,一个工时的登记模块。工时登记本来是不复杂,大家大部分都登记过。就是记录一下,什么时间做了什么事。但由于客户要求,上级要有对下级的修改权,还有项目经理对工时的管理权,这样就复杂了。可能你登记了,你的领导不认帐,或者,你登记到这个项目,但是项目经理不认为你有干 活。OK,我放开,你们谁爱改就谁改。我记下操作,有问题,该找谁自己找去。我承认这是个很烂的设计,但我没想到更好的主意了。

这样,我们下一步要做的事就是如何保存日志的问题了。在看了[url='http://www.iteye.com/topic/191696']JPA + Hibernate 3 CRUD操作历史审计日志的解决方案(附源码)[/url]后,我选择了第6点,采用Hibernate 3的新特性 Event-listener 。由于,我在看文章时,漏了一个很重要的一句,这一句,让我浪费了大半天的时间。相当无语。。。。。

我们用的框架已经配置好了XML文件及默认的事件单元。实际上,我要做的,只是针对我的PO,进行特殊的处理而已。

if (event.getObject() instanceof pcWorkTimeReg) {
// 保存日志
}

看起来特容易,我只要在指定的地方保存日志就这么简单了,实际上,也是这么简单,但就是这个让我写了这个博客。

一开始,我在监听时,注入日志的Manager,如下:

<listener type="post-insert" class="net.jeffrey.hibernate.history.HistoryListener" autowire="byName"/>

但是,一启动就报错了,Bean没办法create。我一开始一起认为,没道理啊,一个很正常的Bean啊。在尝试了好些办法后,我又重新看了一次那个文章,终于看到一段话:[quote]但也有个缺点就是这样的Event-listener是脱离主容器(比如Spring IoC环境)单独实例化的,无法访问主容器的资源[/quote]
我那个无语啊。幸好我后面查了一下,还是可以持久化操作的。我只好把保存的代码从Manager中移到监听里。

[quote]能够取得运行期详细信息,除了能记录粗粒度的实体的保存删除操作外,还能精确追踪对实体字段修改、实体关联/级联关系的变更,能记录更新前的值、更新后的值,可以生成详细日志。
[/quote]
这个应该不错,我还没有去试,下次可以试试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值