Grails3,Hibernate5 - 代理父对象无法解析子访问者?

时间:2018-01-15 12:48:07

标签: hibernate grails hibernate-5.x grails3

我最近将我的grails 3.2.10应用程序从hibernate 4(GORM 6.1.3)升级到hibernate5(GORM 6.1.8)。通过这次升级,我开始从代理对象中看到一些奇怪的(不正确的?)行为,我想知道我是否做错了什么。这是一个示例摘录,用于说明问题,(我意识到这对于Enums来说并不理想,但那是我与之合作的内容):

域类:

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时出错No such property: maxOutput for class: com.test.Socket班级println显示Class: com.test.Socket_$$_jvst4ae_2

如果我在打印语句之前添加it = GrailsHibernateUtil.unwrapIfProxy(it),我会得到正确的com.test.ElectricalOutletOutput: blahblah

另请注意,如果我尝试强制转换Proxy类,则会失败并显示ClassCastException

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

0 个答案:

没有答案