如何在休眠时检查会话是否已经打开了事务?

Man*_*hah 5 session struts hibernate transactions

我的要求是我想执行数据库操作.所以,我在做......

Public boolean myFunction(){
    Session session = sessionFactory.getCurrentSession();
    if(session!=null){
        if (tx != null) {
            Transaction tx = session.beginTransaction();
            //Perform database operation...
            tx.rollback();
            if (session.isOpen()) {
            session.close();
            }
            tx = null;
            session = null;
        }
    }else{
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我的会话不包含任何先前未提及/展开的tranasction时,这很有效.

现在,问题Sceanario就在这里......

Sceanario:

有一个服务...调用myFunction(),该服务在会话中已有一个活动事务.

问题:当myfunction()执行tx.rollback()时...它还回滚了父进程的事务.

1.) Why this happen???
2.) Is there nay way to determine... weather hibernate session contains any previous open/uncommited/active/unrolledback/continue transaction?
Run Code Online (Sandbox Code Playgroud)

我试过了...

Public boolean myFunction(){
    Session session = sessionFactory.getCurrentSession();
    if(session!=null){
        if (tx != null) {
            boolean isAlreadyTransactionStarted = sessionFactory.getCurrentSession().getTransaction().isActive();
            if(isAlreadyTransactionStarted){
                Transaction tx = sessionFactory.getCurrentSession().getTransaction();
            }else{
                Transaction tx = session.beginTransaction();
            }
            //Perform database operation...
            if(isAlreadyTransactionStarted){
                tx.rollback();
                if (session.isOpen()) {
                session.close();
                }
                tx = null;
                session = null;
            }else{
                //Nothing to do...
            }
        }
    }else{
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

但在这种情况下

1.) When parent call contains any active transactions then isAlreadyTransactionStarted becomes true.

2.) But in the case call which does not contains any transaction, also isAlreadyTransactionStarted becomes true.
Run Code Online (Sandbox Code Playgroud)

我的问题仍然是一样的:

有没有办法确定...天气休眠会话包含任何以前的开放/未通信/活动/解压缩/继续交易?

Nic*_*las 1

你可以使用 Session.isDirty() 吗?