Java 在hibernate中,事务的持续时间真的会比会话的持续时间长吗?
我有一个关于hibernate的简单问题: 在hibernate中,事务的持续时间真的会比会话的持续时间长吗Java 在hibernate中,事务的持续时间真的会比会话的持续时间长吗?,java,hibernate,jpa,orm,Java,Hibernate,Jpa,Orm,我有一个关于hibernate的简单问题: 在hibernate中,事务的持续时间真的会比会话的持续时间长吗 @Controller public class VacancyMenuController extends AbstractController{ ... @RequestMapping("/path") public String delete(Model model){ //here session opens and transaction starts ?
@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();
}
}
在上面的代码片段中,我的评论是否正确? 在任何时候,最多有一个未提交的事务与特定会话关联 例如:
您可以在这里找到被会话包围的事务。在本例中,该事务比会话短。事务在会话打开后开始。事务在会话之前已关闭closed@gstackoverflow编辑我的文字。但是你完成了交易中的工作,对吗??这意味着在提交事务之前。此顺序:1.会话打开2.事务sarts 3.事务提交4.会话关闭,True。因此,
任何时候与特定会话关联的大多数未提交事务都已满足,对吗?问题是关于此顺序的可行性//事务启动后的一些操作//会话打开//会话关闭//事务提交
@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
}
}
// 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();
}