2011-05-17 34 views
4

从我的JUnit测试我打电话一个简单的方法来清除我的表:Hibernate的声明挂起

@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()方法的问题。你我不知道是什么:(

EDIT 2

追查问题无论出于何种原因,它只是档一旦进入到命令的executeUpdate的部分:

ParseUtil.encodePath(字符串,布尔)线:100

+0

呃,你会期望什么进一步的输出?我没有看到任何声明。 – Thomas 2011-05-17 09:18:23

+0

lol对不起,我忘了提及我的程序没有完成。它也不会从数据库中的表中删除内容 – Will 2011-05-17 10:03:44

+0

执行clearTable()方法时表中有多少行? – MarkOfHall 2011-05-17 16:20:46

回答

4

这可能clearTable()法的交易和交易的试验方法之间的僵局

请确保您完成(提交或回滚)时的所有事务。留下测试方法。

+0

我有transaction.commit();在catch中包含的.rollback()的每个try块的末尾。最后阻止关闭会话。 但是我已经将问题隔离到clearTable()方法中,它在代码中移动它,一旦它进入,挂起! – Will 2011-05-17 10:27:08