休眠拦截器不起作用

Hibernate interceptor does not work

我正在尝试在我的 spring+hibernate 代码中使用拦截器。

inceptor定义如下:

public class myInterceptor extends EmptyInterceptor{

private static final long serialVersionUID = 1L;
Session session;

public void setSession(Session session) {
    this.session=session;
}

public boolean onSave(Object entity,Serializable id,
    Object[] state,String[] propertyNames,Type[] types)
    throws CallbackException {
    System.out.println("onSave");   
    return false;   
}

public boolean onFlushDirty(Object entity,Serializable id,
    Object[] currentState,Object[] previousState,
    String[] propertyNames,Type[] types)
    throws CallbackException {
    System.out.println("onFlushDirty"); 
    return false;
}

public void onDelete(Object entity, Serializable id, 
    Object[] state, String[] propertyNames, 
    Type[] types) { 
    System.out.println("onDelete");     
}

//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");    
   }        
}

以及我在 dao class 中的拦截器配置和用法以及 hibernate dao 支持扩展是

    myInterceptor interceptor = new myInterceptor();
    SessionFactory sessionFactory = getSessionFactory();
    SessionBuilder sessionBuilder = sessionFactory.withOptions();
    Session session = sessionBuilder.interceptor(interceptor).openSession();
    interceptor.setSession(session);

    Transaction tx = session.beginTransaction();

    session.merge(member);
    tx.commit();
    session.close();

(我也做 SessionFactory 配置而不是这个)

第一个问题是我的拦截器的功能除了 preFlush 和 postFlush 之外不起作用!

第二个问题是我如何使用这个拦截器作为 SessionFactory 的一般配置,但只处理我的特定对象而不是所有对象。

您的拦截器方法 onSave、onFlushDirty 和 onDelete 没有在您的代码中调用,因为您没有添加、修改或删除实体。尝试创建、修改和删除托管实体,它会起作用。

您不能为特定实体配置拦截器;你将不得不在你各自的方法中编写 instanceofs 或 getClass().isAssignableFrom() 或类似的代码来限制那些行为。