我想创建一个新功能,以编程方式从行数限制的表中删除行。这可能需要删除数千个元素。使用的数据库是Oracle。
主要问题是 HQL 不支持用于删除
的limit
或rownum
之类的东西。我们只有 setMaxResults
用于 select
。
我想到的解决方案是:
- 使用
select
,然后循环遍历列表,使用delete
从列表中删除每个元素。 - 使用
session.createSQLQuery
以便能够在查询中使用limit
。
第1点:我想避免它,因为我不喜欢必须将元素带入内存然后删除它们,因为元素可以是任何数字(例如1000000),我在以下方面没有限制元素的数量。我有什么遗漏的东西吗?我可以帮助我解决这个问题吗?
第2点:我不知道session.createSQLQuery
和session.createQuery
之间的性能差异是什么,使用session.createSQLQuery是否有任何不便
?
最佳答案
其他选项
您可以尝试迭代/加载每个对象并将其删除。 (看起来很丑!!)
或者
您可以编写两个单独的 HQL 查询,其中第一个查询的结果将输入到另一个查询中(该查询执行实际的删除操作)。
关于java - 使用 hibernate 限制删除查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31828624/