Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从EntityManager中清除所有实体?_Java_Jpa_Ejb - Fatal编程技术网

Java 如何从EntityManager中清除所有实体?

Java 如何从EntityManager中清除所有实体?,java,jpa,ejb,Java,Jpa,Ejb,我正在使用EJB和JPA开发一个JavaEE应用程序 我正在做一些测试,实体正在持久化。尽管如此,我还是希望删除这些测试之间的实体。我尝试使用EntityManager.clear()方法,但这不起作用。当我尝试咨询一个旧实体时,它仍然在EntityManager上 如何解决此问题?调用EntityManager.clear()不会删除实体,因为它们会持久保存在数据库中。 您可以关闭实体管理器工厂,然后重新打开: @Before public void beforeTest() { en

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

我正在做一些测试,实体正在持久化。尽管如此,我还是希望删除这些测试之间的实体。我尝试使用EntityManager.clear()方法,但这不起作用。当我尝试咨询一个旧实体时,它仍然在EntityManager上


如何解决此问题?

调用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");
}

您使用的是哪种数据库?我使用的是JavaDB和GlassFish,哪家JPA提供商是EclipseLinkI?对不起,这是我第一次使用这种类型的应用程序。我应该把代码放在哪里?我不知道这是否重要,但我不是在使用EntityManager工厂,我只是在使用EntityManager。你不是在用junit测试吗?如果没有,请确保在服务器启动后删除所有数据。在开始测试之前运行删除查询。