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

时间:2014-04-26 18:31:31

标签: java spring hibernate

我目前正在使用Spring和Hibernate建立一个项目。在遇到其他几个问题后,我遇到了下一个问题:P

反正。致电entityManager.flush()时,我收到例外:javax.persistence.TransactionRequiredException: no transaction is in progress

我用@Transactional注释了我的班级,但它仍然没有用。

我在这里阅读了serval线程,其中人们有类似的问题,但解决方案总是<tx:annotation-driven transaction-manager="transactionManager" />。但我已经有了这个配置。

我不确定我应该为您提供哪些代码或文件,因此您可以在此处找到整个项目: https://drive.google.com/file/d/0B7Exc4dHICl-UDN3ZEJnbS1FZFk/edit?usp=sharing

提前谢谢你。

2 个答案:

答案 0 :(得分:0)

@Transactional无效时,

Here会发布有关配置的信息 - 您是否在<context:component-scan>设置了标记appContext.xml?这两个扫描bean的包都要注册并激活注释。如果您没有<context:component-scan> @Transactional注释,则不会在事务中包装该方法。

答案 1 :(得分:0)

通过实施ApplicationListener<ContextRefreshedEvent>并对服务调用进行自引用,我找到了此问题的解决方案。

问题出现是因为调用方法中没有启动事务,并且后续方法调用是内部引用,因此没有创建新事务。因此,我必须将我的调用方法设置为事务性或创建内部引用,并通过该引用调用后续方法。

您必须覆盖以下方法

private MyService myService = myService;    
@Override
        public void onApplicationEvent(ContextRefreshedEvent event) {
            myService = event.getApplicationContext().getBean(MyService.class);
        }

然后使用myService.myMethod()而不是myMethod(),您希望事务处于活动状态。