1

Restrictions.in を使用しているときに Hibernate Criteria に問題があります。制限に送信されたリストに値が含まれていない場合、SQL GrammerException がスローされます。これは、クエリが次のようになるためです。

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

Hibernate ログのエラー ---

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

条件全体を if-then ステートメントでラップします。idListが null またはの場合はidList.size() == 0、クエリを実行する必要さえありません。

于 2011-08-16T14:21:26.357 に答える