1. 程式人生 > >hibernte中用criteria實現not in功能的方法

hibernte中用criteria實現not in功能的方法

我一直喜歡criteria,而不喜歡用hql。

Property類中提供的in方法有三個:
public Criterion in(Collection values)
public Criterion in(Object[] values)
public Criterion in(DetachedCriteria subselect)

但是,並沒有提供相應的三個notin方法,只提供了一個:
public Criterion notIn(DetachedCriteria subselect)
看來,若是用Property方法,只能再建立一個子查詢了。

不過,我們可以再檢視Restrictions類。鬱悶,Restrictions更離譜,只提供了兩個in方法,根本沒有提供notIn方法
public static Criterion in(String propertyName, Object[] values)
public static Criterion in(String propertyName, Collection values)

那,怎麼辦呢?我一直討厭使用hql。
經過一陣探索之後,發現Restrictions有一個not方法,有了,可以把in外面再套一個not,不久可以了嘛:)。

最後的解決方法的例項程式碼如下:
criteria.add(Restrictions.not(Restrictions.in("id", callbackIds)));