如果我们进行程序化交易,我们会写

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

对于会话,我们可以建立所需的尽可能多的事务。

因此,我们有第一个会话对象而不是事务对象。

在声明性事务中,如果我们在服务级别声明性@Transaction注释。
“将在调用此服务方法时,事务将打开”,因此此处没有有关会话的任何信息。
然后在道我们写
Session session=sessiongFactory.getCurrentSession();

在这里,我们先翻译,然后是会话,

谁能帮助我理解,spring如何管理这个声明式事务。

最佳答案

根据文档方法 sessiongFactory.getCurrentSession(),获得当前会话,“当前会话”是指由 CurrentSessionContext impl控制配置的。

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

JTASessionContext 实现将在需要JTA事务的情况下根据需要生成Sessions。如果在调用 currentSession()时,某个会话尚未与当前JTA事务关联,则将打开一个新会话并将其与该JTA事务关联。

关于java - 声明式交易与程序性交易,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31204194/

10-09 02:11