- 浏览: 7328946 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
下面我实现一个利用Interceptor接口实现日志数据稽核的功能,所谓日志数据稽核就是针对一些关键操作进行记录,以便作为业务跟踪的基础依据。
首先定义用于记录操作的实体:
public class AudiLog implements Serializable{
private String id;
private String user;
private String action;
private String entityName;
private String comment;
private Long logtime;
…getter/setter…
}
接下来定义Interceptor接口的实现类和用于持久化操作的AuditDAO类:
package com.lbs.apps.unemployment.subsidy.beforeinfoimport.util;
import net.sf.hibernate.Session;
import net.sf.hibernate.Interceptor;
import java.io.Serializable;
import net.sf.hibernate.type.Type;
import net.sf.hibernate.HibernateException;
import java.util.Iterator;
import java.util.Set;
import java.util.HashSet;
import com.neusoft.entity.User;
public class MyInterceptor implements Interceptor{
private Set insertset=new HashSet();
private Set updateset=new HashSet();
private Session session;
private String userID;
public void setSession(Session session){
this.session=session
}
public void setUserID(String id){
this.userID=id;
}
public boolean onLoad(Object object, Serializable serializable,
Object[] objectArray, String[] stringArray,
Type[] typeArray) {
return false;
}
public boolean onFlushDirty(Object object, Serializable serializable,
Object[] objectArray, Object[] objectArray3,
String[] stringArray, Type[] typeArray) {
if(object instanceof User){
insertset.add(object);
}
return false;
}
public boolean onSave(Object object, Serializable serializable,
Object[] objectArray, String[] stringArray,
Type[] typeArray) {
if(object instanceof User){
updateset.add(object);
}
return false;
}
public void onDelete(Object object, Serializable serializable,
Object[] objectArray, String[] stringArray,
Type[] typeArray) {
}
public void preFlush(Iterator iterator) {
}
public void postFlush(Iterator iterator) {
try{
if(insertset.size()>0){
AuditDAO.dolog(“insert”,userID,inserset,session.connection);
}
if(updateset.size()>0){
AuditDAO.dolog(“update”,userID,updateset,session.connection);
}
}catch(HibernateException he){
he.printStackTrace();
}
}
public Boolean isUnsaved(Object object) {
return null;
}
public int[] findDirty(Object object, Serializable serializable,
Object[] objectArray, Object[] objectArray3,
String[] stringArray, Type[] typeArray) {
return null;
}
public Object instantiate(Class class0, Serializable serializable) {
return "";
}
}
public class AuditDAO{
public static void doLog(String action,String userID,Set modifySet,Connection connection){
Session tempsession=HibernateUtil.getSessionFactory().openSession(connection);
try{
Iterator it=modifyset.iterator();
while(it.hasNext()){
User user=(User)it.next();
AudiLog log=new AudiLog();
log.setUserID(userID);
log.setAction(action);
log.setComment(user.toString());
log.setLogTime(new Long(Calendar.getInstance().getTime().getTime()));
tempsession.save(log);
}
}catch(Exception e){
throw new CallbackException(e);
}finally{
try{
tempsesson.close();
}catch(HibernateException he){
throw new CallbackException(he);
}
}
}
}
最后看一下业务逻辑主程序:
SessionFactory sessionfactory=config.buildSessionFactory();
MyInterceptor it=new MyInterceptor();
session=sessionfactory().openSession(it);
it.setUserID(“currentUser”);
it.setSession(session);
User user=new User();
user.setName(“zx”);
Transaction tx=session.beginTransaction();
session.save(user);
tx.commit();
session.close();
以上示例代码中,在创建Session时,设置Interceptor实例对象,当执行到session.save(user)前,会触发onSave()方法,当执行tx.commit()时,会执行flush(),在执行该方法后会触发postFlush()方法,这个方法通过AuditDAO进行持久化保存业务日志,在这个类中的红色部分时有关持久化操作部分,我们并没有使用原有的Session实例,这是因为要避免Session内部状态混乱,因此我们依托当前Session的JDBC Connection创建了一个临时Session用于保存操作记录,在这个持久化操作中没有启动事务,这是因为临时Session中的JDBC Connection是与外围调用Interceptor的Session共享,而事务已经在外围Session的JDBC Connection上启动。这是在拦截方法中进行持久化操作的标准方法。总之Interceptor提供了非入侵性的回调拦截机制,使我们可以方便而且优雅的实现一些持久化操作的特殊需求。
发表评论
-
【转】在项目中使用多个数据源-多sessionFactory方案
2013-05-10 16:30 3123适用范围:适合SSH架构访问多个数据库, ... -
Hibernate使用中从数据库到模型的加载方式研究
2010-01-28 13:19 1962在项目中数据库中账单Bill一个字段是有多个订单id的以逗 ... -
hibernate中@Transient的使用
2010-01-19 15:20 10688项目中可能有许多实体的需要辅助的属性和方法辅助,hibe ... -
关于hibernate中注解和hbm共存时的加载规律
2010-01-19 15:13 3797项目中使用Spring2.5+hibern ... -
hibernate查询的使用的点滴积累
2010-01-09 13:04 1911/** * 前台查询酒店的级别,设备,类型 * * ... -
Hibernate 的HQL中一个经典函数elements的使用
2010-01-09 12:53 10340在传递索引和元素给集合时(elements and indic ... -
Hibernate关联查询中with的经典使用
2010-01-09 12:42 2211在项目采用Hibernate关联,采用关联使用比较简单,在关 ... -
判断数据库表每条记录中时间段是否在每一个时间段中
2010-01-09 12:35 3082项目中一个成品价格表,每条记录中的价格有一个使用时间 ... -
JPA 中注解一个父类中多个子类实现查询部分子类方法解决方法
2010-01-09 12:10 2069父类: @Entity@Inheritance(stra ... -
Hibernate调用执行存储过程
2010-01-09 12:03 2030项目中需要采用存 ... -
Hibernate的一个异常的解决方案
2009-12-05 11:01 2441在项目中使用HQL时的遇有多个类的嵌套比较发生的异常: ... -
Hibernate的事件和拦截器体系
2009-12-01 13:53 2357持久层框架底层的拦截器机制是对诸如Spring等业务管理容器拦 ... -
Hibernate的拦截器和监听器
2009-12-01 13:52 1973最近项目需要,用到了Hibernate的拦截器和监听器,有些小 ... -
Hibernate的拦截器和监听器
2009-12-01 13:50 3798项目采用Spring构建,持久层技术采用的是 JPA规范 + ... -
Hibernate的注解many-to-one
2009-11-28 12:12 23274項目中一個實例: ... -
Hibernate查询语言HQL 八大要点
2009-11-18 13:15 2010本文讲述Hibernate查询语言HQL。Hibernat ... -
条件查询(Criteria Queries
2009-11-18 13:14 1771... -
Hibernate查询语言(Query Language), 即HQL
2009-11-18 13:05 2475Hibernate查询语言(Query L ... -
Hibernate中的配置属性
2009-11-15 17:40 1756hbm2ddl.auto的使用配置说明: <!-- ... -
Hibernate JPA 的索引的使用
2009-11-15 17:30 11881在Hibernate中Model中一个对象关 ...
相关推荐
5.2 Hibernate回调与拦截机制 5.3 Hibernate实用技术 第6章 Hibernate 实战——创建RedSaga论坛 6.1 目标 6.2 E-R建模还是对象建模 6.3 E-R建模及工具集 6.4 对象建模 6.5 项目的目录组织和基础设施 6.6 测试...
再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了 Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、 ...
直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、Hibernate分页等实用技术,Hibernate实战部分则用一个真实论坛...
直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、Hibernate分页等实用技术,Hibernate实战部分则用一个真实论坛...
5.2 Hibernate回调与拦截机制 5.3 Hibernate实用技术 第6章 Hibernate 实战——创建RedSaga论坛 6.1 目标 6.2 E-R建模还是对象建模 6.3 E-R建模及工具集 6.4 对象建模 6.5 项目的目录组织和基础设施 6.6 测试...
直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、Hibernate分页等实用技术,Hibernate实战部分则用一个真实论坛...
直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、Hibernate分页等实用技术,Hibernate实战部分则用一个真实论坛...
直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、Hibernate分页等实用技术,Hibernate实战部分则用一个真实论坛...
直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、Hibernate分页等实用技术,Hibernate实战部分则用一个真实论坛...
直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、Hibernate分页等实用技术,Hibernate实战部分则用一个真实论坛...
12.3.4 实体监听器和回调 12.4 小结 第13章 优化抓取和高速缓存 13.1 定义全局抓取计划 13.1.1 对象获取选项 13.1.2 延迟的默认抓取计划 13.1.3 理解代理 13.1.4 禁用代理生成 ...
再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了 Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、 ...
8.3.1 使用模板和回调机制 8.3.2 Spring为不同持久化技术所提供的模板类 8.4 数据源 8.4.1 配置一个数据源 8.4.2 获取JNDI数据源 8.4.3 Spring的数据源实现类 8.5 小结 第9章 Spring的事务管理 9.1 数据库事务基础...
8.3.1 使用模板和回调机制 8.3.2 Spring为不同持久化技术所提供的模板类 8.4 数据源 8.4.1 配置一个数据源 8.4.2 获取JNDI数据源 8.4.3 Spring的数据源实现类 8.5 小结 第9章 Spring的事务管理 9.1 数据库事务基础...
模拟支付通常会对接第三方支付平台,如支付宝或微信支付,这部分可能涉及到API调用和回调处理。 后台管理部分,可能包括商品管理、订单管理、用户管理等多个模块。商品管理涉及添加、修改、删除商品,订单管理则...