有没有一种方法可以在hibernate PostgreSQL中截断或删除表和相关的外键



TRUNCATE demo_table CASCADE查询在SQL客户端中有效,但在hibernate PostgreSQL方言中似乎不起作用。我不知道为什么,所以我在hibernate中使用:DELETE FROM table_name截断了一个表,它工作得很好。

public demoManager deleteTable() {
entityManager = crud.begin();
entityManager.createQuery("delete from demo_table").executeUpdate();
entityManager.getTransaction().commit();
return this;
}

现在的问题是,只有当表的主键不是另一个表中的外键时,它才能在hibernate中正常工作。如果它的主键是另一个表中的外键,则测试失败并抛出错误:

Caused by: org.postgresql.util.PSQLException: ERROR: update or delete on table "demo_table" violates foreign key constraint "hui6ys16oiwt19pfkw0fxfaovea" on table "demo_table_two"

添加CASCADE解决了SQL客户端中的主/外键问题,因此我尝试在hibernate中执行同样的操作:

TRUNCATE demo_table CASCADE但出现编译错误:TRUNCATE unexpected

我也尝试过:DELETE FROM demo_table CASCADE,但CASCADE在运行时无法识别。

如何在hibernate PostgreSQL方言中截断或删除表,并在此过程中删除任何相关的外键?

TRUNCATE不是HQL的一部分,因此不能将其与entityManager.createQuery一起使用。

您可以将查询作为本机SQL查询运行:

entityManager.createNativeQuery("TRUNCATE demo_table CASCADE").executeUpdate();

最新更新