我有一个包含 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/