Grails3,Hibernate5-代理父对象可以';无法解析子访问器?

Grails3,Hibernate5-代理父对象可以';无法解析子访问器?,hibernate,grails,hibernate-5.x,grails3,Hibernate,Grails,Hibernate 5.x,Grails3,我最近将Grails3.2.10应用程序从Hibernate4(GORM 6.1.3)升级到hibernate5(GORM 6.1.8)。通过这次升级,我开始看到代理对象的一些奇怪(不正确?)行为,我想知道我是否做错了什么。下面是一个示例摘录,它说明了这个问题(我意识到这对于枚举来说并不理想,但这正是我正在处理的): 域类: package com.test class Socket { String name SocketType socketType //This is an enu

我最近将Grails3.2.10应用程序从Hibernate4(GORM 6.1.3)升级到hibernate5(GORM 6.1.8)。通过这次升级,我开始看到代理对象的一些奇怪(不正确?)行为,我想知道我是否做错了什么。下面是一个示例摘录,它说明了这个问题(我意识到这对于枚举来说并不理想,但这正是我正在处理的):

域类:

package com.test
class Socket {
  String name
  SocketType socketType //This is an enum
}

package com.test
class ElectricalOutlet extends Socket {
  Double maxOutput
  SocketType socketType = SocketType.ELECTRICAL
}
以及使用它导致问题的服务类代码。实现细节并不重要,除了
getSockets()
延迟加载套接字列表。同样,在本例中并不理想,但这在hibernate4下一直有效

def doSomethingWithOutlets(someKey) {
  def sockets = someOtherService.getSockets(someKey)
  sockets.each { 
    if(it.socketType == SocketType.ELETRICAL) {
      println("Class: ${it.class.name}")
      println("Output: ${it.maxOutput}")
    }
  }
}
打印
maxOutput
时的错误是
没有这样的属性:class:com.test.Socket的maxOutput
类println显示
class:com.test.Socket\u$$\ ujvst4ae\u2

如果我在print语句之前添加
it=grailshbernateutil.unwapifproxy(it)
,我会得到正确的
com.test.ElectricalOutlet
Output:blahblah

还要注意,如果我尝试强制转换代理类,它将失败,出现
ClassCastException


我是否遗漏了什么,或者代理类是否应该像过去一样能够解析具体类的属性?在整个代码中,我需要显式地处理代理类,这似乎是不正确的。

找到解决方案了吗?对于解决方案,我使用了GrailsHibernateUtil.UnwapifProxy(it)。我相信我正在使用它作为解决方案,但我不记得找到了一个解决代理类无法正确解析属性的实际解决方案。。。这是很久以前的事了,但我已经忘记了:(