1

我在使用 Restrictions.in 时遇到了 Hibernate Criteria 的问题。如果发送到限制的列表中没有任何值,那么它会抛出 SQL GrammerException,这是预期的,因为查询看起来像

select * from Person p where p.id in ()

休眠日志错误---

com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near ')'. at         
com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError   
SQLServerException.java:197)

Spring日志错误...

org.hibernate.exception.SQLGrammarException: could not execute query
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
org.hibernate.loader.Loader.doList(Loader.java:2536)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276
org.hibernate.loader.Loader.list(Loader.java:2271
org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119
org.hibernate.impl.SessionImpl.list(SessionImpl.java:1716
org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)

导致它的代码是

     criteria.add(Restrictions.in("id", idList)); 

我试过这样做,但它会返回表中的所有值,这与我想要的完全相反..当列表大小为 0 时不返回任何内容..

    if(idList.size()>0  
           criteria.add(Restrictions.in("id", idList)); 

那么我应该在此处进行哪些更改,以便当列表中没有任何值而不是异常时,我不会从查询中得到任何结果......提前致谢!

4

1 回答 1

2

Wrap the entire Criteria in an if-then statement. If the idList is null or idList.size() == 0, don't even bother running the query.

于 2011-08-16T14:21:26.357 回答