删除grails域对象的代理部分?

Ste*_*all 7 proxy grails groovy hibernate grails-orm

我想得到一个域对象的实际实例.也就是说,我需要序列化对象,并且我试图在httpinvoker链的两侧使用域对象.有没有办法获得一个没有任何grails连接的完全加载的域对象,以便我可以序列化它?

Vic*_*nko 8

我们这样做GrailsHibernateUtil.unwrapIfProxy(obj).它不会摆脱Grails注入的方法等 - 只有Hibernate/GORM代理,但它应该足够了.

编辑:

  1. 很抱歉,但您是否将域名声明为implements Serializable
  2. 它可能是你添加/注入你的课程的东西,比如Grails non-bug 6379.
  3. 这段代码(在这里得到)在我grails console的小域类中工作:

.

import org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsHibernateUtil
import com.somegroup.domain.*

def loc = SomeDomainClass.get(1)
loc = GrailsHibernateUtil.unwrapIfProxy(loc)

ByteArrayOutputStream bos = new ByteArrayOutputStream()
ObjectOutput out = new ObjectOutputStream(bos)

out.writeObject(loc)
byte[] yourBytes = bos.toByteArray()
Run Code Online (Sandbox Code Playgroud)