我已经开始使用吉斯方法级交易等中描述的在这里.我有一条消息
@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在初始化程序中的应用程序开始时创建.每个请求都使用相同的实例.
为什么不起作用?
@Transactional方法注释通过AOP,其中Guice Foo通过创建拦截那些带注释的方法调用的代理对象来满足请求,并(可选地)将它们转发到实际对象.确保满足以下条件:
您已@Transactional通过Guice 使用该方法创建了对象,因为Guice否则将无法提供代理.
无论是类还是方法都没有标记final,因为AOP不能轻易地覆盖它们.
您已经安装了JpaPersistModule或其他形式的PersistModule.从源代码,这实际上模块是什么绑定注意MethodInterceptor的@Transactional注解.
如果这不完全符合您的需求,请记住您始终可以使用AOP文档编写自己的方法拦截器.祝好运!