java - setParameterList 海量数据列表

标签 java hql

我有一个包含 8000 项的整数数组列表。

然后我使用 setParameterList 方法在 hql 中设置该数组列表。

只是一个示例查询

return (Integer) sessionFactory.getCurrentSession().createQuery("update data where Id in (:list)").setParameterList("list", arrayList).executeUpdate();

但是在执行查询后我得到了这个错误。

java.lang.StackOverflowError
    at org.hibernate.hql.ast.QueryTranslatorImpl$JavaConstantConverter.visit(QueryTranslatorImpl.java:585)
    at org.hibernate.hql.ast.util.NodeTraverser.visitDepthFirst(NodeTraverser.java:64)
    at org.hibernate.hql.ast.util.NodeTraverser.visitDepthFirst(NodeTraverser.java:65)
    at org.hibernate.hql.ast.util.NodeTraverser.visitDepthFirst(NodeTraverser.java:66)
    at org.hibernate.hql.ast.util.NodeTraverser.visitDepthFirst(NodeTraverser.java:66)
    at org.hibernate.hql.ast.util.NodeTraverser.visitDepthFirst(NodeTraverser.java:66)
    at org.hibernate.hql.ast.util.NodeTraverser.visitDepthFirst(NodeTraverser.java:66)
    at org.hibernate.hql.ast.util.NodeTraverser.visitDepthFirst(NodeTraverser.java:66)
    at org.hibernate.hql.ast.util.NodeTraverser.visitDepthFirst(NodeTraverser.java:66)

有什么办法可以在 hibernate 中解决这个问题。可能这将适用于纯 sql 查询。但是我只想知道HQL有没有其他的方法。

最佳答案

如果您的 list 来自另一个 SQL 查询,请尝试使用 WHERRE EXISTS

否则,您可能必须在循环内独立更新每个元素。

IN 数以千计的项目的子句通常不能被数据库很好地处理。

关于java - setParameterList 海量数据列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16478638/

相关文章:

java - 使用 Java 的数组的 printMax 方法...我不明白的一件事是 double result = Numbers[0]

java - 使用 Netty 在 Resteasy 测试中注入(inject)上下文数据

java - HQL查询where存在或列表元素之间

java - 如何在 HQL 中的 HAVING COUNT() 中使用 CASE?

java - HQL 表达式中的 Null

javascript - 使用JSP/Servlet/Ajax下载文件而不刷新页面

java - Android studio - 读取whatsapp通知问题

java - org.apache.catalina.core.StandardContext.listenerStop 异常

sql - SQL错误中的复合键连接

java - HQL 中命名参数的第二次替换失败