2011-05-17 79 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