Guice @Transactional不会启动交易

Mik*_*sen 9 java guice

我已经开始使用吉斯方法级交易等中描述的在这里.我有一条消息

@Inject
private EntityManager entityManager;

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

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

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

为什么不起作用?

Jef*_*ica 6

@Transactional方法注释通过AOP,其中Guice Foo通过创建拦截那些带注释的方法调用的代理对象来满足请求,并(可选地)将它们转发到实际对象.确保满足以下条件:

  1. 您已@Transactional通过Guice 使用该方法创建了对象,因为Guice否则将无法提供代理.

  2. 无论是类还是方法都没有标记final,因为AOP不能轻易地覆盖它们.

  3. 您已经安装了JpaPersistModule或其他形式的PersistModule.从源代码,这实际上模块是什么绑定注意MethodInterceptor@Transactional注解.

如果这不完全符合您的需求,请记住您始终可以使用AOP文档编写自己的方法拦截器.祝好运!