java - Hibernate拦截器不起作用

标签 java spring hibernate interceptor

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

接收器定义如下:

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

我的拦截器配置和使用 hibernate dao 支持扩展的 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() 或类似代码来限制这些行为。

关于java - Hibernate拦截器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38605253/

相关文章:

Java GUI,组织一个对话框从用户那里获取数据

java - 无法在日志附加器中 Autowiring spring bean

java - JPQL:EclipseLink 和 Hibernate 之间的区别

java - 将业务与表示逻辑分开的最佳方法?

java - 将对象传递给数组列表的区别(初始化一次和多次)

java - 获取经过身份验证的用户

java - 更改 Spring MVC 应用程序的 jar 集导致 java.lang.NoSuchMethodError 错误

java - 无法将 clob 转换为字符串

java - 让 IntelliJ 知道属性文件

Spring MVC 中的 XML 文件下载