hibernate delete 为什么执行不了
我调用模板里的delet方法
经过多次调试sql语句也输出了
就是不删除
不过用在数据库执行sql就删掉了
坐等高手
分数全给你们
这是Controll代码
[code="java"]
String userId = (String) request.getSession().getAttribute(
Constants.SESSION_USER_ID);
List 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();
}
[/code]
这是通用dao的代码
[code="java"]
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;[/code]
事物是spring来管理的
这是事物的级别
[code="java"]
PROPAGATION_REQUIRED,-Exception
[/code]
你getSession();的实现是这样子的么?
[code="java"]
HibernateSessionFactory.getSession();
[/code]
你可以试试这个样子看看行不行。
[code="java"]
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();
}
[/code]
既然你用的是事物,你都没有开始事物和执行事物,你要他怎么删除
没哟commit吧
楼上正解,hibernate的事务开启与关闭是为了完成一个原子操作。
两个操作组合成一个原子操作,一个成功,另一个不成功,那么事务就会回滚。
就像银行转账,一个进款操作一个出款操作,哪个不成功都得回滚。
这个是hibernate事务的真实用途。
其实楼上代码正解,但是最好是在catch到exception后 tx.rollback();