Hibernate 语句挂起

Wil*_*ill 5 java junit hibernate freeze

从我的 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();
    }
Run Code Online (Sandbox Code Playgroud)

清除表看起来像:

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


}
Run Code Online (Sandbox Code Playgroud)

所有相当简单的东西,但我的控制台输出仅此而已:

deleting db contents
Run Code Online (Sandbox Code Playgroud)

我不确定为什么一个简单的delete from classname

可能会导致此类问题。该程序刚刚挂起 10 分钟,没有失败,也没有 junit 测试结果。

编辑

不过,我已将问题隔离到clearTable() 方法,将其在代码中移动,一旦进入,就会挂起!我不太清楚为什么,从我在网上找到的信息来看,我的方法似乎是正确的。但一定是这个方法。我把它放在我的@BeforeClass,当它到达时测试就冻结了。

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

编辑2

跟踪问题到命令的executeupdate部分,无论出于何种原因,一旦到达:

ParseUtil.encodePath(String, boolean) 行:100

axt*_*avt 4

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

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