加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 声明式事务与程序化事务

发布时间:2020-12-15 04:28:38 所属栏目:Java 来源:网络整理
导读:如果我们选择程序化交易,我们会写 Session session=sessiongFactory.openSession();Transaction tx=session.buildTransaction(); 对于会话,我们可以构建我们想要的尽可能多的事务. 所以,我们有第一个会话对象而不是事务对象. 在声明式事务中,如果我们在服务
如果我们选择程序化交易,我们会写

Session session=sessiongFactory.openSession();
Transaction tx=session.buildTransaction();

对于会话,我们可以构建我们想要的尽可能多的事务.

所以,我们有第一个会话对象而不是事务对象.

在声明式事务中,如果我们在服务级别声明@Transaction注释.
“当调用此服务方法时,交易将被打开”,所以这里没有任何关于会话的信息.
然后在道我们写

Session session=sessiongFactory.getCurrentSession();

在这里我们有第一次Transation然后Session,

任何人都可以帮助我理解,Spring如何管理这个声明性交易.

解决方法

根据文档方法,sessiongFactory.getCurrentSession()获取当前会话,“当前会话”意味着由配置使用的CurrentSessionContext impl控制.

文档还提供了向后兼容性的说明:如果未配置CurrentSessionContext但配置了JTA TransactionManagerLookup,则默认为JTASessionContext impl.

如果JTA事务生效,JTASessionContext实现将根据需要生成Sessions.如果在调用currentSession()时会话尚未与当前JTA事务关联,则将打开一个新会话,它将与该JTA事务关联.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读