当前位置: 代码迷 >> Java Web开发 >> hibernate的一个小疑点
  详细解决方案

hibernate的一个小疑点

热度:1135   发布时间:2013-02-25 21:18:08.0
hibernate的一个小问题
无意中发现hibernate的一个小问题,但没办法解释原理,请教各位了
在DAO类里面写一个删除方法
测试以后能正常删除
但是有个非常严重的bug:删除不存在的数据时,依然提示删除成功
测试发现有方法可以避免这BUG:
把beginTransaction改为getTransaction
但是不明白其原理
搜索了其他人的帖子发现这么一句话

session.getTransaction()只是根据session获得一个Transaction实例,但是并没有启动它

session.beginTransaction()在获得一个Transaction后调用其begin()方法

但还是没明白原理,我就想问,为什么用beginTransaction时删除不存在数据依然显示成功
public void delete(Login login) {
// 得到session
Session session = HibernateSessionFactory.getSessionFactory()
.openSession();
// 开启事务
Transaction tr = null;
try {
tr = session.beginTransaction();
session.delete(login);
// 提交数据
tr.commit();
System.out.println("删除成功");
} catch (HibernateException e) {
System.out.println("删除失败");
tr.rollback();
}
session.close();

}

------解决方案--------------------------------------------------------
Java code
Session session = HibernateSessionFactory.currentSession(); //  创建SESSION Transaction tx = null      //声明事务try{ tx = session.beginTransaction();   //开始事务   String hql = "delete Student s where s.name = 'googol' "; Query query = session.createQuery(hql);  query.executeUpdate();  tx.commit()      //一定要提交      tx = null;}catch(Exception e){ e.printStackTrace(); if(tx !=null) {  tx.rollback();         //失败则回滚  } }finally{ session.close();}
------解决方案--------------------------------------------------------
探讨

这个....
sessin.delete是hibernate里封装好的方法,该方法没有返回值

我其实就是想问为什么使用getTransaction就会报异常说删除失败
使用beginTransaction就不报异常
  相关解决方案