Hibernate语句卡住了

5

从我的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();
    }

清空表格的样子如下:
    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会导致这样的问题。程序一直挂起,没有失败或junit测试结果。 编辑 然而,我已经将问题隔离到了clearTable()方法中,在代码中移动它,一旦进入,就会停止响应!我不确定为什么,从我在网上找到的信息来看,我的方法似乎是正确的。但它必须是这个方法。我把它放在了我的@BeforeClass中,当测试到达时,测试就被冻结了。
底线是clearTable()方法存在问题。但我不知道是什么问题 :( 编辑2 追踪到了executeupdate命令的问题所在,由于某种原因,一旦到达以下位置,它就会停滞不前:
ParseUtil.encodePath(String, boolean) line: 100

额,你还期望看到什么输出?我没有看到任何语句。 - Thomas
抱歉,我忘了提到我的程序没有完成。它也没有从数据库表中删除内容。 - Will
执行clearTable()方法时,表中有多少行? - MarkOfHall
大约有50-150个左右,没有什么重要的。虽然自不断尝试以来,增量ID(PK)已经达到了5700的标记。但我认为这不应该有任何实际影响。 - Will
1个回答

4

很可能是clearTable()方法的事务和测试方法的事务之间出现了死锁。

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


我在每个try块的末尾使用了transaction.commit();,并将.rollback()包含在catch中。最后,使用finally块关闭会话。 然而,我已经将问题隔离到clearTable()方法,并在代码中移动它,但是一旦进入该方法,程序就会挂起! - Will

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接