我有一个名为InventoryLineItem的域类,它具有InventoryAccess类型的属性:
class InventoryLineItem {
InventoryAccess inventoryAccess
...
}
另一个名为LineItem的域类具有InventoryLineItem类型的属性:
class LineItem {
InventoryLineItem inventoryLineItem
...
}
我遇到的问题是当我尝试从LineItem类访问InventoryAccess的任何属性时(例如inventoryLineItem.inventoryAccess?.allotment
),我得到以下异常:
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)
}
这就是问题发生的地方。一旦我尝试从inventoryAccess对象获取allotment
属性,就会抛出异常。
我尝试将InventoryLineItem中的inventoryAccess属性设置为lazy: false
,但这并没有帮助。
答案 0 :(得分:0)
如果 InventoryAccess 应该保留在数据库中,那么它也需要是一个域类。
如果没有,那么您可以将其设为transient,但是您必须自己设置该值。例如,您可以添加 getter 来延迟初始化属性:
class InventoryLineItem {
InventoryAccess inventoryAccess
static transients = ['inventoryAccess']
InventoryAccess getInventoryAccess() {
if(inventoryAccess == null) {
// do something to initialize inventoryAcces
}
return inventoryAccess
}
}