Hibernate拦截器不起作用

时间:2016-07-27 06:25:42

标签: java spring hibernate interceptor

我试图在spring + hibernate代码中使用拦截器。

接受者定义如下:

    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();

我的拦截器配置和使用hibernate dao支持扩展的dao类是

string line;
using (StreamReader file = new StreamReader("one_two.config.txt"))
using (StreamWriter newfile = new StreamWriter("log.txt"))
{
    while ((line = file.ReadLine()) != null)
    {
        newfile.WriteLine(line);
    }
}

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

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

第二个问题是如何将此拦截器用作SessionFactory常规配​​置,但只能处理我的特定对象而不是所有对象。

1 个答案:

答案 0 :(得分:1)

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

您无法为特定实体配置拦截器;你必须在各自的方法中对instanceofs或getClass()。isAssignableFrom()等进行编码,以限制行为。