【发布时间】:2010-02-17 14:10:56
【问题描述】:
我需要从 EJB 计时器中的表中删除数百万行。 问题是计时器的事务超时时间为 90 秒,所以我应该将工作分成小块。
由于我不知道在 90 秒内可以删除多少行,所以算法应该循环并一次删除几行,直到时间快到为止。
问题是: 如何在 JPA 中优雅地限制要删除的行数? 对时间戳早于某个日期的所有行进行删除。
我想有可能找到第 1000 个最旧的行和DELETE WHERE timestamp <= {1000th-oldest-row.timestamp},但是,这不是很优雅,我必须到达 1000 中的最后一行才能获得时间戳。
其次,如果90秒后桌子不干净,计时器应该立即再次触发。这很容易解决,但又不是很优雅。
【问题讨论】: