2014-10-28 35 views
2

我正在使用Spring-data-jpaCrudRepository将数据保存在postgres db中。如何使用Spring快速删除数据库表内容?

我每天都要更新完整的数据库内容,这意味着首先删除特定表中的所有数据。

存储库提供了一种方法dao.deleteAll(),但是这个方法持续很长时间,因为我有大约500k条目。

我该如何改进?

回答

3

您可以在实体管理器执行原生SQL查询,并截断数据库

String sql = "TRUNCATE tbl_name;"; 
entityManager.createNativeQuery(sql).executeUpdate(); 
1

TRUNCATE命令快得多大表上,因为它只是核武器的文件,在文件系统层面,而DELETE马克每个记录为免费,而不会降低文件大小,任何触发他们正在运行的定义。

+0

我怎么能使用'truncate'与Hibernate/HQL,如果可能的话? – membersound 2014-10-28 10:25:35

+0

@membersound看到这个答案:http://stackoverflow.com/a/1262767/3304426 – Patrick 2014-10-28 10:42:12

+0

请注意,即使实际上没有实际的数据行,如果定义了外键,在某些数据库中也不能使用truncate。 – Thierry 2014-10-28 14:08:19