我将 postgres 与休眠一起使用,并且我有两个 sql 表。“TABLE_2”与“TABLE_1”具有多对一关系。
CREATE TABLE "TABLE_1"
(
"ID" bigint NOT NULL,
"VALUE" bigint NOT NULL,
CONSTRAINT "PK_TABLE_1 " PRIMARY KEY ("ID" ),
)
CREATE TABLE "TABLE_2"
(
"ID" bigint NOT NULL,
"TABLE_1_ID" bigint,
CONSTRAINT "PK_TABLE_2" PRIMARY KEY ("ID" ),
CONSTRAINT "FK_TABLE_2-TABLE_1" FOREIGN KEY ("TABLE_1_ID")
REFERENCES "TABLE_1" ("ID") MATCH SIMPLE
ON UPDATE CASCADE ON DELETE ????????
)
表 2 中可能有很多(数百万)条目取决于表 1 中的条目。当我删除表 1 中的条目时,表 2 中的所有依赖条目也应该被删除。(没有内存不足异常)
我看到了两种可能的解决方案。
在我的表 2 中使用“ON DELETE CASCADE”。
实现一些业务逻辑来删除级联的条目
X
while (true) {
recTable2 = table2Dao.findForTable1(table1, 100);
if (( recTable2 != null) && (recTable2 .size() > 0)) {
for (Table2 Table2entry : recTable2) {
table2Dao.remove(Table2entry);
}
} else {
break;
}
}
为避免内存不足异常,仅一步删除 100 个条目
这是我的问题:
当我将解决方案 1 与“ON DELETE CASCADE”一起使用时,如果要删除大量数据会怎样?我是否会出现内存不足异常或 postgres 是否“自动”处理此问题。
当我将解决方案 2 与业务逻辑一起使用时,性能非常差!有没有更好的方法来删除很多表条目?
一般来说,您希望以哪种方式删除级联表条目?通过业务逻辑执行还是通过“ON DELETE CASCADE”执行?