0

休止状態について簡単な質問があります:

トランザクションが休止状態のセッションよりも長く続くということは本当にありえますか?

@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
        }
}

私のコメントの上のコードスニペットで正しいですか?

4

1 に答える 1

0

Yes, exactly

特定のセッションに関連付けられているコミットされていないトランザクションは、常に最大で 1 つ存在することが意図されています。

例:

ドキュメントから

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

ここで、セッションに囲まれたトランザクションを見つけることができます。

于 2013-09-29T07:44:32.507 に答える