使用Hibernate和Guice管理JavaSE中的事务

我正在编写一个使用GWT,Hibernate和Google Guice(使用GIN)的相当简单的应用程序。 我想要做的是使用外部管理器管理事务(比如在Spring中使用@Transactional ),而不是使用EntityManager#getTransaction 。 我尝试使用@Transactional ,但它似乎对我不起作用。

我已经使用Providers注入了EntityManager,如下所示:

 /* import stuff */ public class DbProvider implements Provider { public EntityManager get() { EntityManagerFactory emf = Persistence.createEntityManagerFactory("persdb"); return emf.createEntityManager(); } } 

在手动管理事务时,它似乎正常工作。 我希望自动管理事务,也可以使用DBUnit进行自动化测试。

有谁知道如何解决这个问题?

@Transactional在Guice工作需要三件事 :

  • 你的类路径中需要guice-persist.jar
  • 调用@Transactional方法的对象必须由Guice创建
  • 这些方法不能是private