【发布时间】:2015-10-27 23:59:50
【问题描述】:
我想创建一个新功能,以编程方式从表中删除行,并限制行数。这可能是要删除的数千个元素。使用的数据库是Oracle。
主要问题是 HQL 不支持 limit 或 rownum 之类的 deletes。我们只有setMaxResults 对应select。
我想到的解决方案是:
- 要使用
select,然后循环使用delete删除列表中的每个元素。 - 使用
session.createSQLQuery以便能够在查询中使用limit。
第 1 点:我想避免它,因为我不喜欢将元素带入内存以在之后删除它们,因为元素可以是任意数字(例如 1000000),我在以下方面没有限制元素的数量。有什么我遗漏的,我可以帮助我解决这个问题吗?
第2点:不知道session.createSQLQuery和session.createQuery的性能有什么区别,使用session.createSQLQuery有什么不便吗?
【问题讨论】:
-
在删除查询中设置限制的目的是什么?您的数据要么符合某些标准,要么应该被删除 - 要么不。
limit的使用没有意义。第一点是纯恶的本质,不需要从数据库中提取数据,通过网络发送它们以删除它们。 -
由于用户要求,我必须这样做
-
如果目的是分段清除,那么你应该使用真正的(服务器端)SQL。
标签: java sql oracle hibernate hql