2015-01-02 49 views
0

我正在使用EJB和JPA開發JavaEE應用程序。如何從EntityManager中清除所有實體?

我正在做一些測試和實體堅持。雖然,我想刪除這些測試之間的實體。我試圖使用方法EntityManager.clear()但這不起作用。當我嘗試諮詢其中一箇舊實體時,它仍然位於EntityManager上。

我該如何解決這個問題?

+0

你正在使用什麼樣的數據庫? – uaiHebert

+0

我使用JavaDB和GlassFish,JPA提供者是EclipseLink – Ghost

回答

2

調用EntityManager.clear()不會刪除實體,因爲它們在數據庫中是存在的。 你可以關閉實體管理器,然後重新打開:

@Before 
public void beforeTest() { 
    entitManagerFactory.close() 
    entitManagerFactory = // new EntityManagerFactory 
} 

這種方法的問題是,創建一個EntityManager可減慢測試過程。

你可以做的反而是:

1)您可以在測試前刪除所有實體:

@Before 
public void beforeTest() { 
    // execute a query like delete from Person p 
} 

2)你可以使用一個新的ID /值對每個測試:

@Test 
public void test1() { 
    Person person = PersonTestUtil.createPerson("11111"); 
} 

@Test 
public void test2() { 
    Person person = PersonTestUtil.createPerson("22222"); 
} 
+0

對不起,但這是我第一次使用這種類型的應用程序。我在哪裏放這個代碼?我不知道它是否重要,但我沒有使用EntityManagerFactory,我只是使用EntityManager。 – Ghost

+0

你是不是在用junit測試?如果沒有,請確保在服務器啓動後刪除所有數據。在開始測試之前運行刪除查詢。 – uaiHebert

相關問題