我对休眠有一个简单的问题:
真的可以说,事务比休眠会话持续时间更长吗?
@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();
}
您可以在此处找到被会话包围的交易。