Удаление прокси-части объекта домена Grails? - PullRequest
7 голосов
/ 11 апреля 2011

Я хочу получить фактический экземпляр объекта домена.То есть мне нужно сериализовать объект, и я пытаюсь использовать объект домена с двух сторон цепочки httpinvoker.Есть ли способ получить полностью загруженный доменный объект, у которого нет разводки Grails, чтобы я мог его сериализовать?

Ответы [ 2 ]

8 голосов
/ 12 апреля 2011

Мы делаем GrailsHibernateUtil.unwrapIfProxy(obj).Он не избавится от методов, введенных Grails и тому подобного, - только от Hibernate / GORM-прокси, но этого будет достаточно.

edit :

  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()
1 голос
/ 30 октября 2012

Согласно второму комментарию в ответе здесь для явного развертывания прокси-классов с использованием GrailsHibernateUtil.unwrapIfProxy требуется еще один вызов базы данных.Я использовал HibernateProxyHelper.getClassWithoutInitializingProxy для достижения того же результата, и я почти уверен, что это не делает никаких дополнительных вызовов базы данных.

...