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 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件