1

私はこれが何度も尋ねられたことを知っており、私が見つけた解決策のほとんどを読んだり試したりしました。しかし、私の問題に対する正確な解決策が見つかりません。それらのほとんどは save() を呼び出していますが、私はリストを取得しているだけです。これは groovy/grails にあります。

このコードが一部で実行されると、「コレクションの遅延初期化に失敗しました。セッションまたはセッションが閉じられませんでした」というエラーが発生しますreturn caseVisualImpairmentCauses。値が含まれている場合、 「オブジェクトは保存されていない一時インスタンスを参照しています - フラッシュする前に一時インスタンスを保存しcaseVisualImpairmentCausesてください」というエラーが返されます。

def List<CaseVisualImpairmentCause> bindVisualImpairmentCause(Long visualImpairmentPrimaryCauseId, ArrayList caseVisualImpairmentCausesList,
    String visualImpairmentOtherCause) {
    def caseVisualImpairmentCauses = []

    if (visualImpairmentPrimaryCauseId) {
        def visualImpairmentPrimaryCauseInstance = VisualImpairmentCause.get(visualImpairmentPrimaryCauseId)
        CaseVisualImpairmentCause caseVisualImpairmentPrimaryCause = new CaseVisualImpairmentCause(visualImpairmentCauseIdvisualImpairmentCause: visualImpairmentPrimaryCauseInstance)
        caseVisualImpairmentPrimaryCause.isPrimary = true
        caseVisualImpairmentCauses << caseVisualImpairmentPrimaryCause
    }
    caseVisualImpairmentCausesList.each {
        VisualImpairmentCause visualImpairmentCause = VisualImpairmentCause.get(it as Integer)
        CaseVisualImpairmentCause caseVisualImpairmentCause = new CaseVisualImpairmentCause(visualImpairmentCauseIdvisualImpairmentCause: visualImpairmentCause)
        if (it.equals('5')) {
            caseVisualImpairmentCause.caseVisualImpairmentCauseOther = visualImpairmentOtherCause
        }
        caseVisualImpairmentCauses.add(caseVisualImpairmentCause)
    }
    return caseVisualImpairmentCauses
}

それを呼んでいるのは

    obpCaseInstance.visualImpairmentCauses = caseService.bindVisualImpairmentCause(visualImpairmentPrimaryCauseId, listOfCaseVisualImpairmentCauses, visualImpairmentOtherCause)

このエラーが発生する理由は何ですか?

4

1 に答える 1

2

すべてのfindbyId()、.get()、およびgetbyId()を.read()に変更することで、これを解決できました。メソッド(find、get)はすでにフラッシュされており、.save()を呼び出すのと同じくらい良いようです。また、別のサービスから呼び出されているデータをフェッチするすべてのメソッド (findBYOtherproperty のように .read() で置き換えることができないメソッド) を取り出し、代わりに同じメソッドに入れました。これにより、サービスを終了する前に最初にオブジェクトを強制的に保存することなく、エラーが解消されました。

于 2013-03-18T05:13:09.900 に答える