问题描述
我调用模板里的delet方法经过多次调试sql语句也输出了就是不删除不过用在数据库执行sql就删掉了坐等高手分数全给你们这是Controll代码String userId = (String) request.getSession().getAttribute(Constants.SESSION_USER_ID);List<BzptBatchbuy> list = this.bzptbatchbuymanager.findplgmbyuid(userId);try {for (BzptBatchbuy bzt : list) {System.out.println(bzt.getId());this.bzptbatchbuymanager.deleteBzptBatchbuy(bzt.getId());}} catch (Exception e) {e.printStackTrace();}这是通用dao的代码log.debug("deleting " + className + " instance");boolean success = false;try {getSession().delete(getSession().load(entityClass, id));log.debug("delete successful");success = true;} catch (RuntimeException re) {log.error("delete failed", re);throw re;}return success;事物是spring来管理的这是事物的级别<prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop>
解决方案
你getSession();的实现是这样子的么?HibernateSessionFactory.getSession();你可以试试这个样子看看行不行。Session session = HibernateSessionFactory.getSession();Transaction tx = null;try { tx = session.beginTransaction(); BzptBatchbuy bb = (BzptBatchbuy)session.load(BzptBatchbuy.class, id); session.delete(bb); } catch (Exception e) { } finally { tx.commit(); session.close(); }
解决方案二:
楼上正解,hibernate的事务开启与关闭是为了完成一个原子操作。两个操作组合成一个原子操作,一个成功,另一个不成功,那么事务就会回滚。就像银行转账,一个进款操作一个出款操作,哪个不成功都得回滚。这个是hibernate事务的真实用途。其实楼上代码正解,但是最好是在catch到exception后 tx.rollback();
解决方案三:
没哟commit吧
解决方案四:
既然你用的是事物,你都没有开始事物和执行事物,你要他怎么删除