Как удалить все объекты JPA? - PullRequest
1 голос
/ 26 июля 2010

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

Ответы [ 2 ]

2 голосов
/ 26 июля 2010

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

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

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

0 голосов
/ 27 июля 2010

В моем тестовом коде мне нужно иметь пустую / пустую базу данных для каждого метода.

Я бы запустил тестовые методы внутри транзакции (и откат в конце каждого метода).Это обычный подход.Я не вижу смысла в совершении транзакции и записи данных в базу данных, если вы УДАЛИТЕ их сразу после этого.Только не фиксируйте.

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

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

...