gpt4 book ai didi

java - Hibernate拦截器不起作用

转载 作者:行者123 更新时间:2023-11-30 07:14:48 24 4
gpt4 key购买 nike

我正在尝试在我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com