org.hibernate.transactionexception不支持嵌套事务我在做什么错?

时间:2019-06-25 17:01:21

标签: hibernate ejb

我不知道为什么会收到此错误:

javax.faces.FacesException: #{loginBean.login}: org.hibernate.TransactionException: nested transactions not supported

public class UsuarioDaoImpl implements UsuarioDao {

@Override
public FwUsuarios findByUsuario(FwUsuarios usuario) {
  FwUsuarios model = null;

 System.out.println("El usuario es : "+usuario.getClaveUsuario());
 String sql = "FROM FwUsuarios WHERE claveUsuario='"+usuario.getClaveUsuario()+"'";
 Session sesion = HibernateUtil.getSessionFactory().getCurrentSession();
  try{

      sesion.beginTransaction();
      model=(FwUsuarios) sesion.createQuery(sql).uniqueResult();
      sesion.beginTransaction().commit();
  }
  catch(Exception e){
  sesion.beginTransaction().rollback();
  }

  return model;
}

@Override
public FwUsuarios login(FwUsuarios usuario) {
    FwUsuarios model = this.findByUsuario(usuario);
    if(model!= null){
    if(usuario.getPasswordUsuario().equals(model.getPasswordUsuario()))
        model = null;
    }
    return model;
}

}



public class HibernateUtil {

private static final SessionFactory sessionFactory;

static {
    try {
        // Create the SessionFactory from standard (hibernate.cfg.xml) 
        // config file.
        sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
    } catch (HibernateException ex) {
        // Log the exception. 
        System.err.println("Initial SessionFactory creation failed." + ex);
        throw new ExceptionInInitializerError(ex);
    }
}

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}
}

1 个答案:

答案 0 :(得分:0)

不必要地多次致电beginTransaction是问题所在。相反,应该调用一次,然后在以后使用存储的引用:

org.hibernate.Transaction tx;
//...
tx = session.beginTransaction();
//.. some database work here
tx.commit();
//when something went wrong
tx.rollback();