如果我们进行程序化交易,我们会写
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/