【问题标题】:How to clean all entities from EntityManager?如何从 EntityManager 中清除所有实体?
【发布时间】:2015-01-02 15:12:14
【问题描述】:

我正在开发一个带有 EJB 和 JPA 的 JavaEE 应用程序。

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

我该如何解决这个问题?

【问题讨论】:

  • 你用的是什么数据库?
  • 我正在使用 JavaDB 和 GlassFish,JPA 提供者是 EclipseLink

标签: java jpa ejb


【解决方案1】:

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

【讨论】:

  • 很抱歉,这是我第一次使用这种类型的应用程序。我把这段代码放在哪里?我不知道它是否重要,但我没有使用EntityManagerFactory,我只是使用EntityManager。
  • 你不是用junit测试吗?如果没有,请确保在服务器启动后删除所有数据。在开始测试之前运行删除查询。
猜你喜欢
  • 2015-07-30
  • 2016-05-23
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
  • 2019-12-26
  • 1970-01-01
  • 2019-06-10
相关资源
最近更新 更多