Using distinct with Hibernate criteria

HibernateのCriteriaでdistinctを使うにはどうすればいいんでしょうか。
ほとんどCriteriaで書いてるのにそこだけHQLとか微妙だからやだ。
ページングにも使いたいのでDistinctRootEntityも微妙。


とりあえずJIRAでそれっぽいのがOpen Source at Atlassianなんだけど、3年前かよorz 最後のレスがまさに私の心境です。
で、なんとかしようというテクニックがほぼ揃っているのがHibernate Community • View topic - select distinct entities using Criteria。パッチを当てる以外は試したけどイマイチだった。
結局、setProjection(Projections.id())でidをretrieveして、Restrictions.inで再retrieveするという感じにした。微妙。


タイトルが英語なので一応サンプルソースを置いておこう

DetachedCriteria criteria = prepareCriteria( searchContext );
criteria.setProjection( Projections.distinct( Projections.id() ) );
return getHibernateTemplate().findByCriteria(
    DetachedCriteria
        .forClass( SomeEntity.class )
        .add( Restrictions.in( 
            "id" ,
            getHibernateTemplate().findByCriteria(
                criteria ,
                pagingContext.firstResult ,
                pagingContext.maxResult
            )
        ) )
);