【问题标题】:guice - @Transactional - not workingguice - @Transactional - 不工作
【发布时间】:2017-05-19 11:56:33
【问题描述】:

我正在使用 guice 4.1 和 persist 扩展,并希望 @Transactional 能够工作,但事实并非如此。我关注了 wiki 并阅读了这篇文章,但无济于事:

Managing transactions in JavaSE with Hibernate and Guice

只是为了重新迭代......我在做:

  1. 取决于 guice-persist
  2. 使用 google 的 @Transactional 注释
  3. 仅在由 guice 管理的公共或受保护方法上使用注释
  4. 正在启动 PersistService ...

【问题讨论】:

  • 在 SO 上尝试过解决方案,但最终明确管理它: entityManager.getTransaction().begin(); entityManager.persist(实体); entityManager.getTransaction().commit();

标签: java hibernate transactions guice guice-persist


【解决方案1】:

在当前 Sprint 中升级我们的库时,我们遇到了类似的情况。我们所有失败的单元测试都与我们被注入的类有关,但未绑定在模块中。

(使用 Guice 4.0 没有问题)。

如果我们绑定到接口或某些特殊要求,我们倾向于只绑定我们的类。因此,如果我们有一个简单的类,它有一个零参数构造函数或带有 @Inject 注释,我们就不会在模块中绑定它。

public class AA {

    public AA() {

    }

    @Transactional
    public void test() {
        System.out.println("" + getClass().getName());
    }
}

如果注入了 AA 类,调用 test() 会输出

package.test.AA$$EnhancerByGuice$$e2d19b62

升级到 Guice 4.1 后输出是

package.test.AA

将以下内容添加到模块中会将注入更改回代理。 @Transactional 使用 AOP 是如何工作的

bind(AA.class);

【讨论】:

  • 谢谢,其实我今天也遇到了。这可能是一个最佳实践。
猜你喜欢
  • 2012-01-30
  • 1970-01-01
  • 2015-02-19
  • 2013-11-24
  • 2017-06-04
  • 2021-10-30
  • 1970-01-01
  • 2016-12-19
  • 2014-08-02
相关资源
最近更新 更多