Hibernate 休眠活动事务

Hibernate 休眠活动事务,hibernate,Hibernate,在我的服务课上,我希望有如下内容: class ClientService { // Authorize // Returns true: Authorization successful // Returns false: Authorization failed public boolean authorize(String id, String password) { //Here I would like to check if an active transac

在我的服务课上,我希望有如下内容:

class ClientService {

  // Authorize
  // Returns true: Authorization successful
  // Returns false: Authorization failed
  public boolean authorize(String id, String password) {

  //Here I would like to check if an active transaction exists. 
  //If it exists, use that one, else create a new session and start 
  //a new transaction.
  //For example:
  Session session = HibernateUtil.getSessionFactory().getCurrentSession();
  if(!session.SOMEMETHOD_CHECK_IF_TRANSACTION_IS_ACTIVE) {
    session.beginTransaction();
  }

  Client client = clientDAO.get(id);

  if (client != null) {
    if (client.getPassword().equals(password)) {
      logger.debug("Authorization successful. ID: " + client.getId() + ", password: " + client.getPassword());
      return true;
    } else {
      logger.error("Authorization unsuccessful");
      return false;    
    } else {
      logger.debug("Authorization unsuccessful. No client exists with ID: " + id);
      return false;
    }
  }
}
注意方法头后面的注释文本。我对Hibernate不太熟悉,但我认为如果服务方法检查事务是否存在,使用它,或者创建一个新事务并关闭它,那就太好了

如果可能的话,我是否应该考虑任何性能原因(或其他原因)?或者是用其他方式来完成这种事情


向您致意基本上您可以调用session.beginTransaction()在Hibernate的JavaDoc指定的任何情况下:

开始一个工作单元并返回关联的事务对象。如果需要新的基础事务,请开始该事务。否则,在现有基础事务的上下文中继续新的工作


<>但是我会认真考虑使用事务管理框架,比如

LeWER的回答是比我的答案更合适的方法,但是你可以通过调用<代码> session .GETTraceAcession().IcActuvie()/<代码> < /P>来检查事务的状态。 有关详细信息,请参阅javadoc


这将返回事务是否处于活动状态,而不创建任何新事务。

我认为,session.getTransaction()肯定会始终返回活动事务。。。所以不为我工作(至少)。。。。还有别的解决办法吗?我完全同意。在我们的工作场所,他们不使用Spring,这导致了各种hibernate事务问题。
((SessionImpl)session).isTransactionInProgress()