当前位置: 首页 > 知识库问答 >
问题:

对guava eventBus订户使用Spring事务性

公冶子安
2023-03-14

我正在尝试使用guava eventBus在Spring调度事件。在事件处理程序中,我需要hibernate获取一些数据——惰性获取——但是它抛出了错误

.hibernate.event.internal.DefaultLoadEventListener: HHH000327: Error performing load command : org.hibernate.SessionException: Session is closed!

事件总线抛出异常

GRAVE: Could not dispatch event

我的代码如下:

@Transactional
@AllowConcurrentEvents
@Subscribe
public void sessionEventReceived(Session session) {
    session.getTeacher();
}

对于实体会话,我有:

@ManyToOne(fetch = LAZY)
@JoinColumn(name = "TEACHER_ID")
protected Teacher teacher;

那么,我可以在事件总线订户中使用@Transactional吗?

编辑

我有一个服务,该服务将事件与对象会话(实体会话)一起发布,因此,在订阅者检索属性教师之前,Hibernate会话可能已关闭,我该如何处理?

共有1个答案

巫马化
2023-03-14

要使@Transactional正常工作,应通过spring代理调用标记为@Transactional方法。Spring将执行启动/提交/回滚工作。因此,如果您添加带有@Subscribe注释,则可能无法正常工作。(不确定,我应该测试或深入挖掘。

但是,您可以在订阅服务器中注入服务对象,并在处理程序函数中调用该服务的事务性函数。

 类似资料:
  • 1. 前言 工作中确实碰到过一些不知道使用事务的朋友,毫无疑问会给项目带来一些风险。 举个简单的例子吧,网购的时候需要扣减库存,同时生成订单。如果扣库存成功了,没生成订单,结果是库存不知道为何变少了;如果生成订单了,没扣库存,那就有可能卖出去的数量比库存还多。 这两种情况都是不能接受的,我们必须保证这两个对数据库的更新操作同时成功,或者同时失败。 事务就是这样一种机制,将对数据库的一系列操作视为一

  • 在我从Jboss AS5迁移到Wildfly9应用程序的过程中,我试图在Wildfly:javax.transaction.api中加载一个模块。看Wildfly文章如何在WF8中加载模块,它说您可能不需要显式加载一些模块,因为它们是隐式加载的。 然后我在applictionContext.xml中定义它 在jboss-deployment-structure.xml中 但是我得到了这个错误: 谢

  • 我们有一个Android应用程序,可以实现订阅,出于分析目的,我们需要用户进行的所有交易。 我们希望通过API获取所有事务,但找不到任何返回此信息的Googleendpoint。 在Google Play控制台中,我们可以看到这些事务。 在inspector中,我看到Google使用私有endpoint来获取这些数据,但我找不到任何公共APIendpoint。 Google私有endpoint是,

  • 在db会话监视器中,当这种情况发生时,我得到了一个不活动的事务。 我得到的错误如下: 问题是交易和连接应该自动打开和关闭...我希望并发修改失败的事务得到回滚...但似乎他们变得不活跃了。

  • 本文向大家介绍详解Spring Boot 事务的使用,包括了详解Spring Boot 事务的使用的使用技巧和注意事项,需要的朋友参考一下 spring Boot 使用事务非常简单,首先使用注解 @EnableTransactionManagement 开启事务支持后,然后在访问数据库的Service方法上添加注解 @Transactional 便可。 关于事务管理器,不管是JPA还是JDBC等都

  • 这是请求 我试图在我的应用程序中使用上面的ejb 1) 包含JDBC语句2018-03-27 16:28:17,683:错误:http-nio-6180-exec-1:BatchingBatch.PerformExecution:HHH000315:Exception执行批处理[java.sql.BatchUpdateException:batch entry 0 insert into TEAM