我想了解一个域对象的实际实例。也就是说,我需要序列化对象,并且我试图在httpinvoker
链的两侧使用域对象。有没有办法获得一个没有任何grails连接的完全加载的域对象,以便我可以序列化它?
答案 0 :(得分:8)
我们GrailsHibernateUtil.unwrapIfProxy(obj)
。它不会摆脱Grails注入的方法等 - 只有Hibernate / GORM代理,但它应该足够了。
修改:
implements Serializable
?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()
答案 1 :(得分:1)
根据答案here中的第二条评论,明确地使用GrailsHibernateUtil.unwrapIfProxy
展开代理类需要另一个数据库调用。我一直在使用HibernateProxyHelper.getClassWithoutInitializingProxy来实现相同的结果,我很确定这不会进行任何额外的数据库调用。