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() 来解决这个问题。似乎方法(查找、获取)已经在刷新并且与调用 .save() 一样好。我还取出了从另一个服务调用的所有获取数据的方法(不能被 .read() 替换的方法,如 findBYOtherproperty),并将其放在同一个方法中。这使错误消失了,而我没有在离开服务之前强制保存对象。

于 2013-03-18T05:13:09.900 回答