真的是,事务持续时间比休眠会话更长吗?



我对休眠有一个简单的问题:

真的可以说,事务比休眠会话持续时间更长吗?

@Controller
public class VacancyMenuController extends AbstractController{
...
   @RequestMapping("/path")
   public String delete(Model model){
  //here session opens and transaction starts ?
                 vacancyService.delete(vacancy.getId());
 //here transactions commit and session close ?
        sessionFactory.getCurrentSession().flush();
 //here session opens and transaction starts    ?
    Vacancy vacancyFromDb = vacancyService.findById(vacancy.getId());
//here transactions commit and session close    ?
        sessionFactory.getCurrentSession().flush();

    }
}

@TransactionConfiguration(defaultRollback = false)
    @ContextConfiguration(locations = { "classpath:/test/BeanConfig.xml" })
    public class AbstractServiceTest  extends AbstractTransactionalJUnit4SpringContextTests{
           ....
           @Test
        public void delete(){
//here session opens and transaction starts 
            vacancyService.delete(vacancy.getId());
            sessionFactory.getCurrentSession().flush();
            Vacancy vacancyFromDb = vacancyService.findById(vacancy.getId());   
            sessionFactory.getCurrentSession().flush();
            Assert.assertNull(vacancyFromDb);
//here transactions commit and session close
        }
}

在我的评论上方的代码片段中是对的?

Yes, exactly

旨在任何时候最多有一个未提交的事务与特定会话相关联

例:

从文档

// BMT idiom
Session sess = factory.openSession();
Transaction tx = null;
try {
    tx = sess.beginTransaction();
    // do some work
    ...
    tx.commit();
}
catch (RuntimeException e) {
    if (tx != null) tx.rollback();
    throw e; // or display error message
}
finally {
    sess.close();
}

您可以在此处找到被会话包围的交易。

最新更新