我有一个名为InventoryLineItem的域类,它具有InventoryAccess类型的属性:
class InventoryLineItem {
InventoryAccess inventoryAccess
...
}
还有一个称为LineItem的域类,它具有InventoryLineItem类型的属性:
class LineItem {
InventoryLineItem inventoryLineItem
...
}
我面临的问题是,当我尝试从LineItem类(例如
inventoryLineItem.inventoryAccess?.allotment
)访问InventoryAccess的任何属性时,出现以下异常:java.lang.IllegalStateException: Proxy for [com.acme.inventory.domain.InventoryAccess:8604205056156879654] could not be initialized
我正在将实例添加到LineItem实例,如下所示:
List<LineItem> lineItemsPendingTransfer = originalDeliveredItemIds.collect { Long id ->
InventoryLineItem.get(id)?.lineItem
}
然后,我遍历每个订单项,并为每个订单项在LineItem中调用一个执行此操作的方法:
if (inventoryLineItem.inventoryAccess?.allotment?.scannableEndDate?.before(new Date())) {
return LineItemTransferState.buildUnavailableState(UnavailableTransferReason.OUTDATED)
}
这就是问题所在。一旦我尝试从 list 访问对象获取
allotment
属性,就会引发异常。我尝试将InventoryLineItem中的ventoryAccess属性设置为
lazy: false
,但这没有帮助。 最佳答案
如果应该将 InventoryAccess 保留在数据库中,则它也必须是域类。
如果不是,则可以将其设置为transient,但是您必须自己设置值。例如,您可以添加一个 setter/getter 来延迟初始化该属性:
class InventoryLineItem {
InventoryAccess inventoryAccess
static transients = ['inventoryAccess']
InventoryAccess getInventoryAccess() {
if(inventoryAccess == null) {
// do something to initialize inventoryAcces
}
return inventoryAccess
}
}
关于hibernate - Grails-java.lang.IllegalStateException:无法初始化代理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31859181/