如何清除EntityManager中的所有实体?

时间:2015-01-02 15:12:14

标签: java jpa ejb

我正在使用EJB和JPA开发JavaEE应用程序。

我做了一些测试,实体仍在坚持。虽然,我想在这些测试之间删除实体。我尝试使用方法 EntityManager.clear(),但这不起作用。当我尝试咨询其中一个旧实体时,它仍然在EntityManager上。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分: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");
}