休止状態基準を使用する場合、結合タイプを変更するだけで、ルート ドメイン クラスの子コレクションの結果に影響します。
たとえば、次のデータを使用して、クラス Parent をクラス Child と 1 対多の関係にします。
親 | | ID | 名前 | | | 1 | 親 1 | 子 | | ID | 親 ID | 名前 | | | 1 | 1 | 子1 | | | 2 | 1 | 子2 |
次の hibernate 基準を使用すると、1 つの親行が返され、子コレクションにアクセスすると、2 つの行が返されます。
session.createCriteria(Parent.class)
.createCriteria('child', CriteriaSpecification.INNER_JOIN)
.add( Restrictions.eq( 'name', 'Child1' ) )
.list()
ただし、左結合で上記のコードを変更すると、1 つの親行が返されますが、子コレクションにアクセスすると、一致する子行のみが返されます。
session.createCriteria(Parent.class)
.createCriteria('child', CriteriaSpecification.LEFT_JOIN)
.add( Restrictions.eq( 'name', 'Child1' ) )
.list()
この副作用はなぜ起こるのでしょうか?意図した結果に応じて、この副作用を使用または回避することについてのいくつかの議論を見つけましたが、そもそもなぜそれが存在するのか、それが意図されていたのかどうかについては何もありません. 最も直接的な質問は、古い古い欠陥 ( http://opensource.atlassian.com/projects/hibernate/browse/HHH-3872 ) です。
- EDIT 3/24: 固定データ *