Я пытаюсь быстро удалить все данные из нескольких таблиц, используя Spring Data JPA. Из того, что я прочитал, самый быстрый способ сделать это - обрезать таблицы.
Мой код выглядит так:
@Service
public class DatabaseService {
... autowiring ...
@Transactional
public void deleteRepository(){
repository.truncate();
}
}
@Repository
public interface repository extends JpaRepository<Trip, Long> {
@Modifying
@Query(value = "truncate table my_table",
nativeQuery = true)
void truncate();
}
Однако, когда я вызываю метод deleteRepository()
, я получаю следующее исключение:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'databasePopulatorJob': Invocation of init method failed; nested exception is org.springframework.transaction.TransactionSystemException: Could not roll back JPA transaction; nested exception is org.hibernate.TransactionException: Unable to rollback against JDBC Connection
...
Caused by: org.springframework.transaction.TransactionSystemException: Could not roll back JPA transaction; nested exception is org.hibernate.TransactionException: Unable to rollback against JDBC Connection
...
Caused by: org.hibernate.TransactionException: Unable to rollback against JDBC Connection
...
Caused by: java.sql.SQLException: Connection is closed
...
Я использую последнюю базу данных PostgreSQL с драйвером JDBC версии 42.2.5.
Я также пытался использовать другие методы для удаления данных, например DELETE FROM my_table
(my_table содержит около 2 миллионов записей), но это занимает слишком много времени. Я бы оценил любые советы.