Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在hibernate中,事务的持续时间真的会比会话的持续时间长吗?_Java_Hibernate_Jpa_Orm - Fatal编程技术网

Java 在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 ?

我有一个关于hibernate的简单问题:

在hibernate中,事务的持续时间真的会比会话的持续时间长吗

@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();
}