zl程序教程

您现在的位置是:首页 >  后端

当前栏目

hibernate - Transaction not successfully started

hibernate not Transaction Started
2023-09-27 14:28:06 时间

  今天在测试 transaction(使用事务进行管理)的时候, 总报错: Transaction not successfully started

  可能有多种原因, 这位哥们总结得很好: Transaction not successfully started

  我的原因是, 将进行commit提交后,再rollback.

  正确的做法, 应该是先rollback, 如下是完整的代码:

@Test
    public void saveTest() {
        Boolean prepared = false;
        SessionFactory factory = null;
        Session s = null;
        Transaction t = null;
        try {
            factory = HibernateUtil.getSessionFactory();
            s = factory.getCurrentSession();
            t = s.beginTransaction();
            
            Monitor m = new Monitor();
            m.setFenceId("9f005029-7c0d-45d3-96c1-006d1cf94332");
            m.setIMEI("862950025795124");
            m.setAlllowStatus("锁");
            Date now = new Date();
            m.setAllowFrom(now);
            m.setAllowTo(now);
            s.save(m);
            
            prepared = false;    //表示事务的前一部分还没做好准备.
            
            //若前一部分的事务还没准备好,则整个事务取消.
            if(!prepared) {
                if(null != t) {
System.out.println("try rollback...");                    
                    t.rollback();
                }
            }
        } catch (Exception e) {
            if(t != null)
                t.rollback();
        }finally {
            //在finally中进行提交.
            if(null != t)
            t.commit();
        }
    }

  暂时还没有好的解决方案, 因为文档的例子, 是在catch exception的时候, rollback, 而在try 语句中进行commit.

  但是我这个代码, 能满足我的需求.