栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

尽管我正在使用@Transactional注释,但仍获得“无法初始化代理-没有会话”

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

尽管我正在使用@Transactional注释,但仍获得“无法初始化代理-没有会话”

也许您忘记将事务注释添加到

AbstractmyprojectService.saveUsers()

请注意,内部调用永远不会被代理,因此流程如下:

 TeacherimportServiceTest.testSaveTeachers() ->  AbstractmyprojectService.saveUsers() ->  TeacherimportServiceImpl.saveUserObject()

如果

AbstractmyprojectService.saveUsers()
根本不交易,则不会交易。

编辑

阅读您的评论后,我看到了三种解决方法:

  • saveUsers()
    方法提取到帮助程序类

真的很简单,重构代码以将Tx方法保留在一个类中,并通过组合从另一个类使用它。

  • 在中使用程序化交易
    saveUserObject()

例如,注入txManager和

public void saveUserObject() {        DefaultTransactionDefinition def = new DefaultTransactionDefinition();        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);        TransactionStatus status = txManager.getTransaction(def);        try {          // the pre        }        catch (Exception ex) {          txManager.rollback(status);          throw ex;        }        txManager.commit(status);    }
  • 使用AspectJ代替Spring AOP。 (我认为此选项仅对于此问题而言过于复杂。)

使用AspectJ可以替换Aspect的AOP代理

AnnotationTransactionAspect

使用

<tx:annotation-driven mode="aspectj"/>
并选择一种编织方法(编译或加载时间)。

有关加载时间编织的信息,请参见http://static.springsource.org/spring/docs/3.0.5.RELEASE/reference/aop.html#aop-
aj-
ltw



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/409434.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号