件数の指定
hibernateではsetFirstResult、setMaxResultsなどで取得時の件数を指定できます。
SQLにlimitやoffsetが付いた形で発行されるので、結果セットが膨らまず、有効です。
しかし、コレクションに対してfetch joinしている場合には件数が狂います。
対策としてはlazyにするか、結果セットのリストを自分でsubListする、などになります。
« 2008年04月 | メイン | 2008年06月 »
hibernateではsetFirstResult、setMaxResultsなどで取得時の件数を指定できます。
SQLにlimitやoffsetが付いた形で発行されるので、結果セットが膨らまず、有効です。
しかし、コレクションに対してfetch joinしている場合には件数が狂います。
対策としてはlazyにするか、結果セットのリストを自分でsubListする、などになります。
通常、CriteriaはSessionオブジェクトから生成します。DetachedCriteriaは、HibernateのSessionオブジェクトのインスタンスを参照することが出来ない状況下でCriteriaを構築するために用意されています。
ただしバージョンによってはCriteriaで出来ることがDetachedCriteriaで出来ないことがあります。たとえばDetachedCriteriaではcreateCriteria, createAlias時に結合方法の指定が出来ない、などです。Hibernateのバージョン3.2.6以降では対応されていますので、3.2.6以降を利用するとよいと思います。バージョン3.2.6では、DetachedCriteriaとCriteriaとのインタフェースの差異がなくなっているようです。
Add outer join support for aliases on DetachedCriteria
なお、setFetchModeでの指定は可能ですので、こちらで何とかするという方法もあります。