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 ) ) ) );