Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Hibernate条件选择一个巨大的列表并在in子句中传递ID_Java_Performance_Hibernate_Orm_Criteria - Fatal编程技术网

Java 如何使用Hibernate条件选择一个巨大的列表并在in子句中传递ID

Java 如何使用Hibernate条件选择一个巨大的列表并在in子句中传递ID,java,performance,hibernate,orm,criteria,Java,Performance,Hibernate,Orm,Criteria,嗨,我想在我的数据库中查找具有限制的对象。在 Criteria c = s.createCriteria(MyClass.class); c.add(Restrictions.in("id", hugeidlist)); return c.list(); 该列表包含超过100.000个条目(大多数条目在数据库中不可用),这使得hibernate可以随 http-bio-8080-exec-5 03/06/2014 16:05:59,346 | WARN | org.hibernate.engi

嗨,我想在我的数据库中查找具有限制的对象。在

Criteria c = s.createCriteria(MyClass.class);
c.add(Restrictions.in("id", hugeidlist));
return c.list();
该列表包含超过100.000个条目(大多数条目在数据库中不可用),这使得hibernate可以随

http-bio-8080-exec-5 03/06/2014 16:05:59,346 | WARN | org.hibernate.engine.jdbc.spi.SqlExceptionHelper | logExceptions | SQL Error: 0, SQLState: 08006
http-bio-8080-exec-5 03/06/2014 16:05:59,351 | ERROR | org.hibernate.engine.jdbc.spi.SqlExceptionHelper | logExceptions | An I/O error occured while sending to the backend.
http-bio-8080-exec-5 03/06/2014 16:05:59,353 | WARN | com.mchange.v2.c3p0.impl.NewPooledConnection | handleThrowable | [c3p0] A PooledConnection that has already signalled a Connection error is still in use!
http-bio-8080-exec-5 03/06/2014 16:05:59,354 | WARN | com.mchange.v2.c3p0.impl.NewPooledConnection | handleThrowable | [c3p0] Another error has occurred [ org.postgresql.util.PSQLException: This connection has been closed. ] which will not be reported to listeners!
org.postgresql.util.PSQLException: This connection has been closed.

我能做什么?

发送一个巨大的IN子句查询将非常慢,在Oracle上,IN查询列表中的参数限制为1000个

Id您要传递的Id以前是通过查询获取的,因此您应该使用
EXISTS
子句使用单个查询来组合这两个Id,该子句采用第一个查询使用的筛选条件