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,该子句采用第一个查询使用的筛选条件