gpt4 book ai didi

spring - 事件监听器在 Hibernate 上不起作用?

转载 作者:行者123 更新时间:2023-12-02 08:29:25 25 4
gpt4 key购买 nike

我已经实现了一个事件监听器来审核我的实体上的操作。例如,我为 PreInsertEventListener 制作了一个名为 HibernatePreInsert 的事件监听器。另外,通过阅读 stackoverflow 上的此处,我配置了一个名为 HibernateIntegrator 的集成器。由于我使用的是 Hibernate 4 和 spring 4,因此我在 META-INF/services 下创建了一个名为 com.dacasals.raspertwo.interceptors.HibernateInterceptor 的文件,并在其中添加了集成器类,正如网上和此处推荐的那样。但是当我运行我的应用程序并插入一个新元素时,没有任何反应,甚至没有显示我的 HibernatePrePersist 的消息。这是我第一次尝试 Hibernate EventListeners,我不知道可能出了什么问题。

这是我的问题涉及的类的示例,还有文件结构:

听者:

public class HibernatePreInsert implements PreInsertEventListener{
private static final long serialVersionUID = 1L;
static final Logger logger = LoggerFactory.getLogger(HibernatePreInsert.class);

@Override
public boolean onPreInsert(PreInsertEvent event) {
if(event.getEntity() instanceof Person){
//display a message to know if this works or not
logger.info("It works");
}
return false;
}
}

积分器:

public class HibernateIntegrator implements Integrator{

public void integrate(Configuration configuration, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry){
final EventListenerRegistry registry = serviceRegistry.getService(EventListenerRegistry.class);

HibernatePreInsert listener = new HibernatePreInsert();

registry.prependListeners(EventType.PRE_INSERT, listener);
}

@Override
public void integrate(Metadata metadata, SessionFactoryImplementor sessionFactory,
SessionFactoryServiceRegistry serviceRegistry) {
// TODO Auto-generated method stub

}

@Override
public void disintegrate(SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) {
// TODO Auto-generated method stub

}

}

文件 com.dacasals.raspertwo.interceptors.HibernateInterceptor:

com.dacasals.raspertwo.interceptors.HibernateInterceptor

提前致谢。

编辑:我在写作时犯了一个错误。我使用的是 Hibernate 5,而不是 4。

最佳答案

我让我的听众开始工作,而没有使用我之前找到的方法。我没有使用服务定义文件,而是创建了一个新类,在其中注册我实现的事件监听器,如下所示:

@Component
public class EscuchadorGeneral {

@PersistenceUnit
private EntityManagerFactory emf;

@Inject
private InsertEvent insert;

@Inject
private UpdateEvent update;

@Inject
private DeleteEvent delete;

@PostConstruct
protected void init(){
SessionFactoryImpl sF = emf.unwrap(SessionFactoryImpl.class);
EventListenerRegistry registry = sF.getServiceRegistry().getService(EventListenerRegistry.class);
registry.getEventListenerGroup(EventType.POST_INSERT).appendListener(insert);
registry.getEventListenerGroup(EventType.POST_UPDATE).appendListener(update);
registry.getEventListenerGroup(EventType.PRE_DELETE).appendListener(delete);
}

}

现在我可以监听我的任何实体被插入、更新或删除的情况。我希望这个解决方案也适用于其他开发人员。

关于spring - 事件监听器在 Hibernate 上不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42302291/

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