Hibernate 如何创建一个拦截器呢?

Java-框架王 Hibernate 发布时间:2021-07-14 17:05:14 阅读数:7952 1
下文讲述Hibernate创建拦截器的方法分享 在Hibernate中,当一个对象将被创建和保持。一旦对象已经被修改,它必须被保存到数据库里。这个过程持续直到下一次对象被需要,它将被从持久的存储中加载。 那么我们如何监控一个对象的不同生命周期的状态呢? 下文将一一道来,如下所示: 在Hibernate中,对象的不同生命周期的状态,由Interceptor接口提供不同的处理方法 拦截器中接口方法如下所示:
编号 方法和描述
1 findDirty() 这个方法在当 flush() 方法在一个 Session 对象上被调用时被调用
2 Instantiate() 这个方法在一个持续的类被实例化时被调用
3 isUnsaved() 这个方法在当一个对象被传到 saveOrUpdate() 方法时被调用
4 onDelete() 这个方法在一个对象被删除前被调用
5 onFlushDirty() 这个方法在当 Hibernate 探测到一个对象在一次 flush(例如,更新操作)中是脏的(例如,被修改)时被调用
6 onLoad() 这个方法在一个对象被初始化之前被调用
7 onSave() 这个方法在一个对象被保存前被调用
8 postFlush() 这个方法在一次 flush 已经发生并且一个对象已经在内存中被更新后被调用
9 preFlush() 这个方法在一次 flush 前被调用。 Hibernate 拦截器给予了我们一个对象如何应用到应用程序和数据库的总控制
创建拦截器示例
  import java.io.Serializable;
import java.util.Date;
import java.util.Iterator;

import org.hibernate.EmptyInterceptor;
import org.hibernate.Transaction;
import org.hibernate.type.Type;

public class MyInterceptor extends EmptyInterceptor {
   private int updates;
   private int creates;
   private int loads;

   public void onDelete(Object entity,
                     Serializable id,
                     Object[] state,
                     String[] propertyNames,
                     Type[] types) {
       // do nothing
   }

   // This method is called when Employee object gets updated.
   public boolean onFlushDirty(Object entity,
                     Serializable id,
                     Object[] currentState,
                     Object[] previousState,
                     String[] propertyNames,
                     Type[] types) {
       if ( entity instanceof Employee ) {
          System.out.println("Update Operation");
          return true; 
       }
       return false;
   }
   public boolean onLoad(Object entity,
                    Serializable id,
                    Object[] state,
                    String[] propertyNames,
                    Type[] types) {
       // do nothing
       return true;
   }
   // This method is called when Employee object gets created.
   public boolean onSave(Object entity,
                    Serializable id,
                    Object[] state,
                    String[] propertyNames,
                    Type[] types) {
       if ( entity instanceof Employee ) {
          System.out.println("Create Operation");
          return true; 
       }
       return false;
   }
   //called before commit into database
   public void preFlush(Iterator iterator) {
      System.out.println("preFlush");
   }
   //called after committed into database
   public void postFlush(Iterator iterator) {
      System.out.println("postFlush");
   }
}
拦截器的使用 只需在打开一个Session会话时,加入拦截器即可,如下例所示:
    public Integer addUser(String name,int salary){
      Session session = factory.openSession( new MyInterceptor() );
      Transaction tx = null;
      Integer userId = null;
      try{
         tx = session.beginTransaction();
         User user = new User(name,salary);
         userId = (Integer) session.save(user); 
         tx.commit();
      }catch (HibernateException e) {
         if (tx!=null) tx.rollback();
         e.printStackTrace(); 
      }finally {
         session.close(); 
      }
      return userId;
   }
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/Hibernate/202107/496.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者