ddf168913 2009-07-12 11:41 采纳率: 100%
浏览 722
已采纳

Hibernate手动事务管理问题

[code="java"]
public void deleteMoreFlowCards(String[] vouNos) {
String tempVouNos = VouNoGenerator.getString(vouNos, ",");

    String sql = "delete from t_flow_card  where vouNo in("+tempVouNos+")";
    String flowCardDetailSql = "delete from t_flow_card_detail where vou_no in("+tempVouNos+")";

    [color=red]此处使用getCurrentSession,就抱Transaction not successfully started
              openSession和getCurrentSession的区别是,getCurrentSession提交后,session会自动关闭
                 而openSession不会,需手动提交,可和这没关系啊。[/color]        
               Session session = getHibernateTemplate().getSessionFactory().openSession();
    //Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
    //SQLQuery sqlQuery = session.createSQLQuery(sql);

    Connection conn = null;
    PreparedStatement psmt=null;
    Transaction tx = null;

    try {
        //conn.setAutoCommit(false);
        tx = session.beginTransaction();
        conn = session.connection();

        psmt = conn.prepareStatement(flowCardDetailSql);
        psmt.executeUpdate();

        psmt = conn.prepareStatement(sql);
        psmt.executeUpdate();

System.out.println("commit"+conn.getAutoCommit());

        //conn.commit();
        tx.commit();

    } catch (SQLException e) {
        e.printStackTrace();

        if(tx != null){
            tx.rollback();
        }
        /*if(conn != null){
            try {
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        }*/
    }finally{
        try {
            //conn.setAutoCommit(true);
            psmt.close();
            conn.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    //sqlQuery.executeUpdate();



}

[/code]

描述见红色字体

补充:Hibernate 使用jdbc进行批量删除时,事务管理是使用Connection来管理还是使用Hibernate封装好的Transaction来管理呢?请给建议。谢谢。

字不变红,再补:
[color=red]此处使用getCurrentSession,就抱Transaction not successfully started
openSession和getCurrentSession的区别是,getCurrentSession提交后,session会自动关闭
而openSession不会,需手动提交,可和这没关系啊。[/color]

Session session = getHibernateTemplate().getSessionFactory().openSession();

[b]问题补充:[/b]
[color=red]
getCurrentSession就指得到当前可用的session,如果压根就没开启事务,
[/color]

我事务管理采用的spring的事务管理,不要我手动开啊,

[color=red]
getCurrentSession就指得到当前可用的session
[/color],如果没有会开新的吧

  • 写回答

3条回答 默认 最新

  • wanghaolovezlq 2009-07-12 12:19
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?