Как я удаляю все объекты JPA?

В моем коде тестирования у меня должна быть пустая/пустая база данных в каждом методе. Есть ли код, который достиг бы этого, для вызова в @Before теста?

1
задан simpatico 26 July 2010 в 08:33
поделиться

2 ответа

На самом деле вы всегда можете использовать JPQL,

em
   .createQuery("DELETE FROM MyEntity m")
   .executeUpdate()
;

Но обратите внимание, нет никаких гарантий, что кэш сущностей также будет очищен. Но для целей юнит-тестирования это выглядит как хорошее решение.

2
ответ дан 2 September 2019 в 22:45
поделиться

В моем тестовом коде мне нужно, чтобы в каждом методе была пустая/пустая база данных.

Я бы запускал тестовые методы внутри транзакции (и откатывался в конце каждого метода). Это обычный подход. Я не вижу смысла в фиксации транзакции и записи данных в базу данных, если сразу после этого вы их удалите. Просто не фиксируйте.

Альтернативой (не исключительной) может быть использование DbUnit для приведения базы данных в известное состояние перед выполнением теста. При этом обычно не требуется ее очистка.

Другим вариантом может быть использование необработанного JDBC для сброса базы данных, если она существует, а затем JPA воссоздает всю базу данных. Однако это будет довольно медленно.

0
ответ дан 2 September 2019 в 22:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: