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

Guice@Transactional不会启动事务

弘思聪
2023-03-14

我已经开始使用这里描述的Guice方法级事务。我有一条消息,比如

@Inject
private EntityManager entityManager;

@Transactional
public UserSession createSession(User user, String browser) {
    UserSession session = new UserSession(user, browser);
    entityManager.persist(session);
}

从简短的描述中,我认为wis应该就足够了。但是我收到一个错误,因为没有启动任何事务。只有当我自己启动并提交它时,它才有效。

对象是由Guice在初始化程序中的应用程序的开始时创建的。每个请求使用相同的实例。

为什么它不起作用?

共有3个答案

曾宏毅
2023-03-14

我遇到了一个与你类似的问题,通过从@javax切换解决了。交易与@com进行交易。谷歌。注射坚持交易的显然,Guice Persist不支持Java事务API中的@Transactional注释。

宰父保臣
2023-03-14

在再次检查所有东西后,它没有工作。有趣的是,它在两者之间工作,但每一百次才工作一次。

经过一些额外的测试,我发现我需要根据每个请求重新创建类。在应用程序启动时创建它们之前。现在它似乎工作得很好。

谢谢你的提示帮助我进一步调查。

晁璞
2023-03-14

@Transactional方法注释通过AOP工作,在这种方法中,Guice通过创建一个代理对象来完成对Foo的请求,该代理对象拦截那些带注释的方法调用,并(可选地)将它们转发给实际对象。确保以下内容属实:

>

类和方法都没有标记为final,因为AOP不能轻易重写它们。

您已经安装了JpaPersistModule或其他形式的PersistModule。从源代码中注意到,这个模块实际上是将MethodInterceptor绑定到@Transactional注释的模块。

如果这不完全符合您的需要,请记住,您可以随时使用AOP文档编写自己的方法拦截器。祝你好运

 类似资料:
  • 我正在使用Guice注入EntityManager。当我提交注入实体管理器的操作时,BD端没有发生任何事情:没有事务通过!!!你能帮我弄清楚发生了什么吗? 这是我的代码: 网状物xml Inject torListener类: 持久性模块类: GuiceModule类: RestModule类: 公共类RestModule扩展了JerseyServletModule{ 最后是网络服务(jeresy

  • 我创建了以下示例。但我没有得到预期的结果。下面是我的代码: 1.应用程序.属性 下面是完整的堆栈跟踪:

  • 我将JProfiler 7配置为与本地运行的Weblogic 8.1集成。 似乎weblogic在使用JProfiler生成的脚本(名为startweblog\u JProfiler.cmd)时启动得很好 然而,janalyiler部分错误并带有以下消息(分析从未发生): 我为PATH添加了以下内容: 路径=C:\Program Files\jprofiler7\bin\windows; 修改了我

  • 当我尝试启动嵌入式tomcat时,我的应用程序将一直运行,直到tomcat达到以下行: "Dez11, 2012 3:28:06PMorg.apache.coyote.AbstractProtocol启动信息:启动协议处理程序["超文本传输协议-bio-8080"]" 有人能帮我嵌入Tomcat吗? 顺致敬意,

  • 我在开始时遇到了问题!事实上,它并没有启动,我也没有得到更多的信息: 有人能帮我吗?

  • 我的Spring Boot应用程序有一个奇怪的行为。 该应用程序的“打开会话”视图为假。 我有一个控制器和一个服务,用annotation @Transactionnal公开2个方法。 Application.properties: 我的服务: 我的控制者(案例1): 使用调试中的SQL,我看到选择查询是在调用服务的过程中执行的。但是我只看到了1次刷新(几次更新),而且是在service.doB(