Hibernate语句挂起

时间:2011-05-17 09:15:08

标签: java hibernate junit hang

从我的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

1 个答案:

答案 0 :(得分:4)

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

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