私は熱心な結合が実行されると期待しているGrailsサービスクラスに基準クエリを書きました。結果をJSONレスポンスまたはmy GSP。クエリは期待通りに実行されました(DataSource.groovyで私のhibernate.show_sql = trueを設定しましたが、私はクエリを見ることができます)。しかし、私のGSPで関連付けをクロールすると、Hibernateは遅延ロード協会。熱心なロードが実際に働いていると私は確信していません。私は怠け者に設定したくありません:これらの関連の私のドメインクラス内ではfalseです。Grails GORM Criteria Eager Fetchをクエリ
これは、基準クエリです:
def market = Market.withCriteria(uniqueResult:true){
idEq(marketId)
fetchMode 'resourceAssignments', FetchMode.JOIN
fetchMode 'resourceAssignments.userRole', FetchMode.JOIN
fetchMode 'resourceAssignments.userRole.role', FetchMode.JOIN
fetchMode 'resourceAssignments.userRole.user', FetchMode.JOIN
resourceAssignments{
userRole{
role{
'in'('name', roleNames)
}
}
}
}
上記のクエリが問題なく返されます。私もないとOpenSessionInViewInterceptorを上書きしようとした
<g:each in="${market.resourceAssignments}" var="ra">
</g:each>
:私は私のGSPに、しかし、次のコードを実行しようとすると、私はそれを遅延resourceAssignmentsを取得しているかのように、Hibernateは2番目のクエリを発行していることがわかります空のWebRequestInterceptorを作成し、それを使用するためにresources.groovyのopenSessionInViewInterceptorを設定することによって、私がこれをしたら、org.hibernate.LazyInitializationExceptionを取得しました.LazyInitializationExceptionは、私がこれらの関連付けを熱心に取り出すことを指定したとしても、HibernateまたはGORMがまだ2番目のクエリを実行しようとしていることを確認しているようです。
ありがとうBurt。バグが修正されるまでHQLを使用します。ボビー・ワーナー氏は、興味のある方々のためにこの問題についてJiraのバグを提出しました:http://jira.grails.org/browse/GRAILS-9829 –
@DavidMaloneで言及されたJIRAの問題は、GitHub https://github.com/に移行されました。 grails/grails-core/issues/2764 –