-1

我有以下使用 Hibernate 的更新和删除查询:

public boolean update(CuentaUsuario usuario) {
    boolean flag = false;
    Session sesion = HibernateUtil.getSessionFactory().openSession();
    Transaction tx = sesion.beginTransaction();
    try {
        CuentaUsuario usuariodb = (CuentaUsuario) sesion.load(CuentaUsuario.class, usuario.getIdcuentaUsuario());
        usuariodb.setUsername(usuario.getUsername());
        usuariodb.setIdRol(usuario.getIdRol());
        usuariodb.setCorreo(usuario.getCorreo());
        sesion.saveOrUpdate(usuariodb);
        tx.commit();
        flag = true;
    } catch (Exception ex) {
        if (tx != null) {
            tx.rollback();
            flag = false;
        }
    }
    return flag;
}

当它们被调用时,它们似乎没有任何效果。数据实际上并未在数据库中更新或删除。

这是如何引起的,我该如何解决?

4

1 回答 1

1

阅读您的代码时引起我注意的第一件事是:

sesion.beginTransaction();
// ...    
sesion.beginTransaction().commit();
// ...
sesion.beginTransaction().rollback();

所以基本上你在这里做的是:

  • “开始新的交易”
  • “开始新事务并立即提交”
  • “开始一个新事务并立即执行回滚”

这没有任何意义。您不应该每次在提交和回滚时都启动一个新事务,而是在最初启动的事务上执行它。您的具体问题是因为您从未提交真正的事务而引起的。

通常的方法是:

Transaction tx = null;
try{
    tx = session.beginTransaction();
    // perform some operations on your entities
    tx.commit();
}
catch(SomeException ex){
    if(tx != null){
        tx.rollback();
    }
}

也许代码中有更多错误。我没有深入研究它。也许这已经解决了你的问题。否则我们必须进一步检查。

于 2013-09-26T22:00:52.853 回答