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();
}
[解决办法]
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();}
[解决办法]