从我的junit测试中,我正在调用一个简单的方法来清除我的表:

    @AfterClass
public static void runAfterClass() {
    //Clear db contents after tests
    // NOTE this clears ALL data from the table
    try {
        System.out.println("deleting db contents");
        HibFunction.clearTable();
    } catch (Exception e) {
        System.out.println("Couldnt delete db contents");
        e.printStackTrace();
    }

clearTable看起来像:
    public static void clearTable()
{
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction transaction = null;
    try{
    transaction = session.beginTransaction();
    session.createQuery("delete from metadataPoC.hib.TestHib").executeUpdate();
    transaction.commit();
    }catch (HibernateException e) {
        transaction.rollback();
        e.printStackTrace();
    } finally {
        session.close();
    }


}

所有相当简单的内容,但是我的控制台输出没有比:
deleting db contents

我不确定为什么只是一个简单的delete from classname
可能导致此类问题。该程序刚刚挂起10分钟,没有任何故障或junit测试的结果。

编辑

但是,我已将问题隔离到clearTable()方法中,并在代码中移动了该问题,并在它进入后立即挂起!
我不确定为什么从我在网上找到的信息来看,为什么我的方法看起来正确。但这一定是这种方法。我将其放置在@BeforeClass中,测试刚到达时就冻结了。

底线是clearTable()方法存在问题。你不知道是什么:(

编辑2

跟踪问题到命令的executeupdate部分,无论原因是什么,一旦到达以下原因,它都会停顿:

ParseUtil.encodePath(String,boolean)第100行

最佳答案

这可能是clearTable()方法的事务与测试方法的事务之间的僵局。

离开测试方法时,请确保完成(提交或回滚)所有事务。

07-27 19:48