我使用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;
}
当它们被调用时,它们似乎没有任何效果。数据实际上并未在数据库中更新或删除。
这是如何引起的?如何解决?
答案 0 :(得分: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();
}
}
也许代码中有更多错误。我没有深入研究它。 也许这已经解决了你的问题。否则我们必须进一步检查。