hibernate delete 为什么执行不了

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();