没有懒惰地初始化集合,没有关闭会话或会话

时间:2013-03-05 11:01:53

标签: grails groovy lazy-loading

我知道这已被问过很多次了,我已经阅读/尝试了我能找到的大多数解决方案。但我无法找到解决问题的确切方法。他们中的大多数都在调用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)

知道这个错误发生的原因吗?

1 个答案:

答案 0 :(得分:2)

我能够通过将所有findbyId(),. get()和getbyId()更改为.read()来解决这个问题。似乎方法(find,get)已经刷新,并且与调用.save()一样好。我还取出了所有获取数据的方法(不能被.read()替换的方法,如findBYOtherproperty)从另一个服务调用并将其放在相同的方法中。这使得错误消失,我没有强迫在离开服务之前保存对象。