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();