行动_2015 2015-02-04 10:36 采纳率: 0%
浏览 720

Hibernate的这段代码在myeclipse中运行使用tx.com

static Department add(){
Session s = null;
Transaction tx = null;
try{
Department depart = new Department();
depart.setName("depart");

        Employee employee1 = new Employee();
        employee1.setName("employee1");
        employee1.setDepart(depart);

        Employee employee2 = new Employee();
        employee2.setName("employee2");
        employee2.setDepart(depart);


        s = HibernateUtil.getSession();
        tx = s.beginTransaction();
        s.save(depart);
        s.save(employee1);
        s.save(employee2);
        tx.commit();
        return depart;
    }finally{
        if(s != null)
            s.close();
    }





}

这段代码在myeclipse中运行、当我用 tx.commit();提交事务的时候、数据库中
虽然已经更新了、但是myeclipse中的进程还是没有关、就是控制台的那个红点没有熄灭?查看数据库此时事务还是由myeclipse控制、当我把事务停止(手动停止myeclipse中)事务的时候、数据库中就可以操作了、说明此时myeclipse还是没有释放锁、不明白为什么?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-03 09:01
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    我理解你的问题。根据你提供的代码,当事务提交时,数据应该被持久化到数据库,并且我的eclipse中不应该有锁定。如果你仍然看到我的eclipse中有锁定,这可能是因为一些额外的问题导致的。

    首先,让我解释一下事务是如何工作的:

    • 事务是用于管理数据库一致性的一种机制。
    • 当一个事务开始时,它会锁定数据库资源(例如,表)。如果在事务内发生错误,那么这些锁定将会被取消。
    • 如果事务成功完成,那么所有的锁定都会被解锁。
    • 如果事务失败,那么所有锁定都被保留。

    在这个例子中,add()方法尝试创建一个新的部门和员工,并将其保存到数据库。一旦这个操作成功,事务就会自动提交并解除对数据库的所有锁定。

    然而,在你的情况下,当你执行 tx.commit(); 语句后,似乎数据库中的事务还没有被完全提交。这可能是由于以下原因:

    1. 数据库连接还在,但事务已经被取消或者异常中断。
    2. 你在处理事务的过程中出现了错误,比如SQL语句执行出错,这时可能会出现未提交的事务。
    3. 还有一些其他的原因可能导致未提交的事务。

    要解决这些问题,请确保以下几个步骤都正确执行:

    1. 确保你的数据库连接没有关闭,或者至少已经断开连接。
    2. add() 方法中,确保正确的抛出了任何可能发生的异常。
    3. 检查 s.commit(); 是否正确地调用了 tx.commit();

    如果你发现上述步骤都无法解决问题,你可以考虑将数据库连接设置为 s = HibernateUtil.getSessionFactory().openSession(); 的方式,这样可以确保数据库连接始终有效。同时,也可以检查是否还有其他线程正在访问或修改数据库,以防止死锁。

    希望以上信息能帮助你解决问题!

    评论

报告相同问题?