拦截器

拦截器:老的拦截器
配置:
第一步:自定义的拦截类
public class MyInterceptor extends EmptyInterceptor {
public boolean onSave(Object entity, Serializable id, Object[] state,
String[] propertyNames, Type[] types) {
if (entity instanceof Team) {
Team t = (Team)entity ;
System.out.println(t.getName() + " --- is to be saved ... ");
}
return false ;
}
}
第二步:
配置到项目中去 由于拦截器是针对所有的操作 ,所以不应该在session上
而应该在sessionFactory 上配置
步骤:

static {
sessionFactory = new Configuration().configure().setInterceptor(new MyInterceptor()).buildSessionFactory() ;
}
缺陷:不够灵活 ,要修改代码 所以一般不这样用 , 建议使用hibernate中的时间监听

14.
拦截器:hibiscus 3版本中的拦截器
配置:
第一步:自定义的拦截类
public class MyListener implements SaveOrUpdateEventListener {

public void onSaveOrUpdate(SaveOrUpdateEvent event)
throws HibernateException {
if (event.getObject() instanceof com.cs.Team ){
Team t = (Team)event.getObject() ;
System.out.println("Team object is saved" + t.getId() + " " + t.getName());
}
}
}
第二步:
配置到项目中去 由于拦截器是针对所有的操作 ,所以不应该在session上
而应该在sessionFactory 上配置
步骤:
  <event type="save">
<listener class="org.hibernate.event.def.DefaultSaveEventListener" />
<listener class="com.cs.util.MyListener" />
</event>
有点:够灵活 ,添加新的事件 ,只需要修改配置 ,不需要修改代码

注意事项:<listener class="org.hibernate.event.def.DefaultSaveEventListener" />为
hibernate的默认事件 ,如果要添加事件,则不需要保留该事件,另外事件顺序存在先后关系
比如说上面的例子中,如果调换顺序 ,则在拦截器中得不到要保存对象的id ,因为还没来得及保存
测试: 既然如此 ,如果把 native 的id 改为 uuid 由hibernate 来生成 ,是否可以解决呢?
答案: 不可以 ,经测试发现 ,由于hibernate的实现 , uuid 也是在DefaultSaveEventListener监听器
中产生的 .

何时需要用到拦截器:
一般来说 ,用的最多的就是做日志
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值