gpt4 book ai didi

spring - 无法使用 JPA 截断 PostgreSQL 表

转载 作者:行者123 更新时间:2023-11-29 13:40:28 26 4
gpt4 key购买 nike

我正在尝试使用 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
...

我正在使用带有 JDBC 驱动程序版本 42.2.5 的最新 PostgreSQL 数据库。

我也尝试过其他方法来删除数据,例如 DELETE FROM my_table(my_table 包含大约 200 万条记录),但耗时太长。我会很感激任何提示。

最佳答案

如果你在表之间有关系,你将无法截断表,因为这是数据完整性违规异常,如果你使用的是数据库 H2,你可以做一些技巧:

SET REFERENTIAL_INTEGRITY FALSE;

TRUNCATE TABLE tbtable;

SET REFERENTIAL_INTEGRITY TRUE;

.sql

关于spring - 无法使用 JPA 截断 PostgreSQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56207035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com