Hibernate JPA和Spring javax.persistence.TransactionRequiredException:没有事务正在进行中

kch*_*eng 24 java spring jpa

我打电话的时候:

entityManager.flush()
Run Code Online (Sandbox Code Playgroud)

我得到标题中提到的例外.

我正在使用Hibernate JPA.

Rom*_*man 17

在我自己遇到这个问题并花费几个小时试图解决它后,我终于找到了它的理由:Spring有一个错误,@Transactional如果同一个类有@Service自动装配方法的注释,则无法维护带有注释的事务.

一旦@Service注解是从所涉及的服务类,以及相应的Bean除去被宣布在XML配置:

<bean id="myService" class="com.example.myapp.service.MyServiceImpl" />
Run Code Online (Sandbox Code Playgroud)

问题消失了.

查看此JIRA错误以获取更多详细信息.

  • 好吧,这是一个错误并不完全正确,你已经给出的链接已经很好地解释了为什么会发生这种情况 - 在appContext.xml和spring-servlet.xml中将Service实例化为bean.它应该只在appContext.xml中获取'bean',否则它将不具有事务支持. (4认同)

Cha*_*kar 5

执行此语句时,请确保您有一个活动事务。如果您使用的是JPA,请使用EntityManager.getTransaction()。begin()。这是假设您在JTA事务范围之外使用JPA。

如果您在具有JTA支持的容器中运行应用程序,则还可以使用JTA UserTransaction来管理事务。