Sim... desde que a consulta nao seja tao grande (ter muitos filhos
associados ao registro pai) tudo bem.

Senao, vc pode matar seu server... para essas situações é bem propício q
apareça o classico "out of memory: pergem space".


Bom.. dá uma olhada no TIDE do GraniteDS, derepente seja uma boa solucao pra
vc. Ou, manipular os VOs para q traga so qndo vc realmente precisar desses
dados.


[]s




Em 10 de maio de 2010 09:18, Marcelo Caser <[email protected]>escreveu:

> opa!!
>
> grande Mário!
>
> Finalmente uma luz... qual seria sua sugestão!?! rsrsrs...
>
> Apriore o que fiz foi fazer o usar a anotacao @ManyToOne sem
> FetchType.LAZY, assim ele me traz os objetos filhos...
>
> Em 10 de maio de 2010 00:21, Mário Júnior <[email protected]> escreveu:
>
> Vc esta tentando fazer isso para fugir do famoso (e difamado) problema de
>> lazy-load na serializacao das consultas?
>> Se sim, creio q nao vá funcionar, pq no momento da serializacao, o
>> JavaAdapter "padrao" do blaze não vai conseguir ler o objeto pq a lista
>> ainda "nao existe". Até existe uma referencia lá, mas repare q não sao os
>> objetos (registros) relacionados ao registro pai... na verdade é apenas um
>> para o interceptor do Hibernate poder ter referencia do objeto pai para
>> anexar os filhos, depois de carrega-los do banco Vc vai perceber tb q uma
>> série de atributos q vc não declarou estará sendo mostrado naquele objeto,
>> pq o Hibernate usa o .
>>
>> Enfim, oq poderia tentar fazer (veja só, "tentar" significa q eu ainda nao
>> fiz, mas teoricamente não vai funcionar também :P) seria estender o adapter
>> e dar um Hibernate.initialize() na colecao que vc quer, mas isso num pontos
>> específico onde vc teria q varrer todos os objetos passados pela
>> decodificacao da classe Amf3Output.java para só dar initialize quando
>> realmente precisar.
>>
>> Na pratica, é mais-ou-menos isso que o GraniteDS faz, mas de uma forma bem
>> mais estruturada (não só estendendo o adapter, mas criando outras factories
>> e um interceptor. Isso ficou melhor no framework que o Frank Wolf criou,
>> chamando de TIDE).
>>
>> Concluindo, não é algo relativamente "simples".
>>
>> Boa sorte, []s
>>
>>
>>
>>
>> Em 9 de maio de 2010 22:16, Marcelo Caser <[email protected]>escreveu:
>>
>>> nao, nao... estou trabalhando com hibernate+spring+blazeds+java... estou
>>> mapeando as classes do java, os "TO", Externalizable.
>>>
>>> Para entender melhor o quadro segue abaixo o que estou fazendo: sao 3
>>> classes java que estou usando no momento.
>>>
>>> *Classes Java:*
>>>
>>> package br.org.oabgo.saeo.entidade;
>>>
>>> import static javax.persistence.GenerationType.IDENTITY;
>>>
>>> import java.io.Externalizable;
>>> import java.io.IOException;
>>> import java.io.ObjectInput;
>>> import java.io.ObjectOutput;
>>> import java.io.Serializable;
>>> import java.sql.Timestamp;
>>> import java.util.HashSet;
>>> import java.util.Set;
>>>
>>> import javax.persistence.CascadeType;
>>> import javax.persistence.Column;
>>> import javax.persistence.Entity;
>>> import javax.persistence.FetchType;
>>> import javax.persistence.GeneratedValue;
>>> import javax.persistence.Id;
>>> import javax.persistence.OneToMany;
>>> import javax.persistence.Table;
>>> import javax.persistence.Transient;
>>>
>>> import core.dao.TransferObject;
>>>
>>> @Entity
>>> @Table(name = "tbDsCertameExameOrdem")
>>> public class *CertameTO* extends TransferObject implements
>>> Externalizable {
>>>
>>>     @Id
>>>     @GeneratedValue(strategy = IDENTITY)
>>>     @Column(name = "Id", unique = true, nullable = false, precision = 18,
>>> scale = 0)
>>>     private Long id;
>>>
>>>     @Column(name = "intNumeroLivro")
>>>     private Integer intNumeroLivro;
>>>
>>>     @Column(name = "vchDescricao", nullable = false, length = 50)
>>>     private String vchDescricao;
>>>
>>>     @Column(name = "datDataProvaObjetiva", length = 23)
>>>     private Timestamp datDataProvaObjetiva;
>>>
>>>     @Column(name = "datDataProvaEscrita", length = 23)
>>>     private Timestamp datDataProvaEscrita;
>>>
>>>     @Column(name = "datDataProvaOral", length = 23)
>>>     private Timestamp datDataProvaOral;
>>>
>>>     @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY,
>>> mappedBy = "certameTO")
>>>     private Set<CandidatoTO> candidatoTOs = new HashSet<CandidatoTO>(0);
>>>
>>>     public CertameTO() {
>>>     }
>>>
>>>     // *** Gets and Sets ***
>>>
>>>     @Transient
>>>     public Serializable getKey() {
>>>         return getId();
>>>     }
>>>
>>>     public void setId(Serializable id) {
>>>         this.id = (Long) id;
>>>     }
>>>
>>>     public Long getId() {
>>>         return id;
>>>     }
>>>
>>>     public Integer getIntNumeroLivro() {
>>>         return intNumeroLivro;
>>>     }
>>>
>>>     public void setIntNumeroLivro(Integer intNumeroLivro) {
>>>         this.intNumeroLivro = intNumeroLivro;
>>>     }
>>>
>>>     public String getVchDescricao() {
>>>         return vchDescricao;
>>>     }
>>>
>>>     public void setVchDescricao(String vchDescricao) {
>>>         this.vchDescricao = vchDescricao;
>>>     }
>>>
>>>     public Timestamp getDatDataProvaObjetiva() {
>>>         return datDataProvaObjetiva;
>>>     }
>>>
>>>     public void setDatDataProvaObjetiva(Timestamp datDataProvaObjetiva) {
>>>         this.datDataProvaObjetiva = datDataProvaObjetiva;
>>>     }
>>>
>>>     public Timestamp getDatDataProvaEscrita() {
>>>         return datDataProvaEscrita;
>>>     }
>>>
>>>     public void setDatDataProvaEscrita(Timestamp datDataProvaEscrita) {
>>>         this.datDataProvaEscrita = datDataProvaEscrita;
>>>     }
>>>
>>>     public Timestamp getDatDataProvaOral() {
>>>         return datDataProvaOral;
>>>     }
>>>
>>>     public void setDatDataProvaOral(Timestamp datDataProvaOral) {
>>>         this.datDataProvaOral = datDataProvaOral;
>>>     }
>>>
>>>     public Set<CandidatoTO> getCandidatoTOs() {
>>>         return candidatoTOs;
>>>     }
>>>
>>>     public void setCandidatoTOs(Set<CandidatoTO> candidatoTOs) {
>>>         this.candidatoTOs = candidatoTOs;
>>>     }
>>>
>>>     public void setId(Long id) {
>>>         this.id = id;
>>>     }
>>>
>>>     @SuppressWarnings("unchecked")
>>>     @Override
>>>     public void readExternal(ObjectInput in) throws IOException,
>>>             ClassNotFoundException {
>>>         id = in.readLong();
>>>         intNumeroLivro = (Integer) in.readObject();
>>>         vchDescricao = (String) in.readObject();
>>>         datDataProvaObjetiva = (Timestamp) in.readObject();
>>>         datDataProvaEscrita = (Timestamp) in.readObject();
>>>         datDataProvaOral = (Timestamp) in.readObject();
>>>         candidatoTOs = (Set<CandidatoTO>) in.readObject();
>>>     }
>>>
>>>     @Override
>>>     public void writeExternal(ObjectOutput out) throws IOException {
>>>         out.writeObject(id);
>>>         out.writeObject(intNumeroLivro);
>>>         out.writeObject(vchDescricao);
>>>         out.writeObject(datDataProvaObjetiva);
>>>         out.writeObject(datDataProvaEscrita);
>>>         out.writeObject(datDataProvaOral);
>>>         out.writeObject(candidatoTOs);
>>>     }
>>>
>>> }
>>>
>>> package br.org.oabgo.saeo.entidade;
>>>
>>> import static javax.persistence.GenerationType.IDENTITY;
>>>
>>> import java.io.Externalizable;
>>> import java.io.IOException;
>>> import java.io.ObjectInput;
>>> import java.io.ObjectOutput;
>>> import java.io.Serializable;
>>>
>>> import javax.persistence.Column;
>>> import javax.persistence.Entity;
>>> import javax.persistence.FetchType;
>>> import javax.persistence.GeneratedValue;
>>> import javax.persistence.Id;
>>> import javax.persistence.JoinColumn;
>>> import javax.persistence.ManyToOne;
>>> import javax.persistence.Table;
>>> import javax.persistence.Transient;
>>>
>>> import core.dao.TransferObject;
>>>
>>> @Entity
>>> @Table(name = "tbCdCandidatoAnteriorExameOrdem")
>>> public class *CandidatoTO* extends TransferObject implements
>>> Externalizable {
>>>
>>>     @Id
>>>     @GeneratedValue(strategy = IDENTITY)
>>>     @Column(name = "Id", unique = true, nullable = false, precision = 18,
>>> scale = 0)
>>>     private Long id;
>>>
>>>     @ManyToOne(fetch = FetchType.LAZY)
>>>     @JoinColumn(name = "IdCertame")
>>>     private CertameTO certameTO;
>>>
>>>     @ManyToOne(fetch = FetchType.LAZY)
>>>     @JoinColumn(name = "IdAreaAtuacao")
>>>     private AreaAtuacaoTO areaAtuacao;
>>>
>>>     @Column(name = "intNumeroSequencia", nullable = false)
>>>     private Integer intNumeroSequencia;
>>>
>>>     @Column(name = "intPaginaLivro", nullable = false)
>>>     private Integer intPaginaLivro;
>>>
>>>     @Column(name = "vchNomeCandidato", nullable = false, length = 60)
>>>     private String vchNomeCandidato;
>>>
>>>     @Column(name = "bitSituacao", nullable = false)
>>>     private Boolean bitSituacao;
>>>
>>>     @Column(name = "texObservacao")
>>>     private String texObservacao;
>>>
>>>
>>>     public CandidatoTO() {
>>>     }
>>>
>>>     // *** Gets and Sets ***
>>>
>>>     @Transient
>>>     public Serializable getKey() {
>>>         return getId();
>>>     }
>>>
>>>     public void setId(Serializable id) {
>>>         this.id = (Long)id;
>>>     }
>>>
>>>     public Long getId() {
>>>         return id;
>>>     }
>>>
>>>     public void setId(Long id) {
>>>         this.id = id;
>>>     }
>>>
>>>     public CertameTO getCertameTO() {
>>>         return certameTO;
>>>     }
>>>
>>>     public void setCertameTO(CertameTO certameTO) {
>>>         this.certameTO = certameTO;
>>>     }
>>>
>>>     public AreaAtuacaoTO getAreaAtuacao() {
>>>         return areaAtuacao;
>>>     }
>>>
>>>     public void setAreaAtuacao(AreaAtuacaoTO areaAtuacao) {
>>>         this.areaAtuacao = areaAtuacao;
>>>     }
>>>
>>>     public Integer getIntNumeroSequencia() {
>>>         return intNumeroSequencia;
>>>     }
>>>
>>>     public void setIntNumeroSequencia(Integer intNumeroSequencia) {
>>>         this.intNumeroSequencia = intNumeroSequencia;
>>>     }
>>>
>>>     public Integer getIntPaginaLivro() {
>>>         return intPaginaLivro;
>>>     }
>>>
>>>     public void setIntPaginaLivro(Integer intPaginaLivro) {
>>>         this.intPaginaLivro = intPaginaLivro;
>>>     }
>>>
>>>     public String getVchNomeCandidato() {
>>>         return vchNomeCandidato;
>>>     }
>>>
>>>     public void setVchNomeCandidato(String vchNomeCandidato) {
>>>         this.vchNomeCandidato = vchNomeCandidato;
>>>     }
>>>
>>>     public Boolean getBitSituacao() {
>>>         return bitSituacao;
>>>     }
>>>
>>>     public void setBitSituacao(Boolean bitSituacao) {
>>>         this.bitSituacao = bitSituacao;
>>>     }
>>>
>>>     public String getTexObservacao() {
>>>         return texObservacao;
>>>     }
>>>
>>>     public void setTexObservacao(String textObservacao) {
>>>         this.texObservacao = textObservacao;
>>>     }
>>>
>>>     @Override
>>>     public void readExternal(ObjectInput in) throws IOException,
>>>             ClassNotFoundException {
>>>         id = in.readLong();
>>>         certameTO = (CertameTO) in.readObject();
>>>         areaAtuacao = (AreaAtuacaoTO) in.readObject();
>>>         intNumeroSequencia = (Integer) in.readObject();
>>>         intPaginaLivro = (Integer) in.readObject();
>>>         vchNomeCandidato = (String) in.readObject();
>>>         bitSituacao = in.readBoolean();
>>>         texObservacao = (String) in.readObject();
>>>     }
>>>
>>>     @Override
>>>     public void writeExternal(ObjectOutput out) throws IOException {
>>>         out.writeObject(id);
>>>         out.writeObject(certameTO);
>>>         out.writeObject(areaAtuacao);
>>>         out.writeObject(intNumeroSequencia);
>>>         out.writeObject(intPaginaLivro);
>>>         out.writeObject(vchNomeCandidato);
>>>         out.writeObject(bitSituacao);
>>>         out.writeObject(texObservacao);
>>>     }
>>>
>>> }
>>>
>>> package br.org.oabgo.saeo.entidade;
>>>
>>> import static javax.persistence.GenerationType.IDENTITY;
>>>
>>> import java.io.Externalizable;
>>> import java.io.IOException;
>>> import java.io.ObjectInput;
>>> import java.io.ObjectOutput;
>>> import java.io.Serializable;
>>>
>>> import javax.persistence.Column;
>>> import javax.persistence.Entity;
>>> import javax.persistence.GeneratedValue;
>>> import javax.persistence.Id;
>>> import javax.persistence.Table;
>>> import javax.persistence.Transient;
>>> import javax.persistence.UniqueConstraint;
>>>
>>> import core.dao.TransferObject;
>>>
>>> @Entity
>>> @Table(name = "tbDsAreasAtuacoes", uniqueConstraints =
>>> @UniqueConstraint(columnNames = "vchDescricao"))
>>> public class *AreaAtuacaoTO* extends TransferObject implements
>>> Externalizable {
>>>
>>>     @Id
>>>     @GeneratedValue(strategy = IDENTITY)
>>>     @Column(name = "Id", unique = true, nullable = false, precision = 18,
>>> scale = 0)
>>>     private Long id;
>>>
>>>     @Column(name = "intCodigo")
>>>     private Integer intCodigo;
>>>
>>>     @Column(name = "vchDescricao", unique = true, nullable = false,
>>> length = 50)
>>>     private String vchDescricao;
>>>
>>>     public AreaAtuacaoTO() {
>>>     }
>>>
>>>     // *** Gets and Sets ***
>>>
>>>     @Transient
>>>     public Serializable getKey() {
>>>         return getId();
>>>     }
>>>
>>>     public void setId(Serializable id) {
>>>         this.id = (Long) id;
>>>     }
>>>
>>>     public Long getId() {
>>>         return id;
>>>     }
>>>
>>>     public void setId(Long id) {
>>>         this.id = id;
>>>     }
>>>
>>>     public Integer getIntCodigo() {
>>>         return intCodigo;
>>>     }
>>>
>>>     public void setIntCodigo(Integer intCodigo) {
>>>         this.intCodigo = intCodigo;
>>>     }
>>>
>>>     public String getVchDescricao() {
>>>         return vchDescricao;
>>>     }
>>>
>>>     public void setVchDescricao(String vchDescricao) {
>>>         this.vchDescricao = vchDescricao;
>>>     }
>>>
>>>     @Override
>>>     public void readExternal(ObjectInput in) throws IOException,
>>>             ClassNotFoundException {
>>>         id = in.readLong();
>>>         intCodigo = (Integer) in.readObject();
>>>         vchDescricao = (String) in.readObject();
>>>     }
>>>
>>>     @Override
>>>     public void writeExternal(ObjectOutput out) throws IOException {
>>>         out.writeObject(id);
>>>         out.writeObject(intCodigo);
>>>         out.writeObject(vchDescricao);
>>>     }
>>>
>>> }
>>>
>>> e abaixo eu tenho minhas classes em AS3 mapeadas:
>>>
>>> package br.org.oabgo.saeo.entidade
>>> {
>>>     import flash.utils.IDataInput;
>>>     import flash.utils.IDataOutput;
>>>     import flash.utils.IExternalizable;
>>>
>>>     import mx.collections.ArrayCollection;
>>>
>>>
>>>     [RemoteClass(alias="br.org.oabgo.saeo.entidade.CertameTO")]
>>>     [Bindable]
>>>     public class* CertameTO* implements IExternalizable
>>>     {
>>>
>>>         public var id:Number;
>>>
>>>         public var intNumeroLivro:int;
>>>
>>>         public var vchDescricao:String;
>>>
>>>         public var datDataProvaObjetiva:Date;
>>>
>>>         public var datDataProvaEscrita:Date;
>>>
>>>         public var datDataProvaOral:Date;
>>>
>>>         public var candidatoTOs:ArrayCollection;
>>>
>>>         public function CertameTO()
>>>         {
>>>         }
>>>
>>>         public function readExternal(input:IDataInput):void
>>>         {
>>>             id = input.readObject() as Number;
>>>             intNumeroLivro = input.readObject() as int;
>>>             vchDescricao = input.readObject() as String;
>>>             datDataProvaObjetiva = input.readObject() as Date;
>>>             datDataProvaEscrita = input.readObject() as Date;
>>>             datDataProvaOral = input.readObject() as Date;
>>>             candidatoTOs = input.readObject() as ArrayCollection;
>>>         }
>>>
>>>         public function writeExternal(output:IDataOutput):void
>>>         {
>>>             output.writeObject(id);
>>>             output.writeObject(intNumeroLivro);
>>>             output.writeObject(vchDescricao);
>>>             output.writeObject(datDataProvaObjetiva);
>>>             output.writeObject(datDataProvaEscrita);
>>>             output.writeObject(datDataProvaOral);
>>>             output.writeObject(candidatoTOs);
>>>         }
>>>     }
>>> }
>>>
>>> package br.org.oabgo.saeo.entidade
>>> {
>>>     import flash.utils.IDataInput;
>>>     import flash.utils.IDataOutput;
>>>     import flash.utils.IExternalizable;
>>>
>>>     [RemoteClass(alias="br.org.oabgo.saeo.entidade.CandidatoTO")]
>>>     [Bindable]
>>>     public class *CandidatoTO* implements IExternalizable
>>>     {
>>>
>>>         public var id:Number;
>>>
>>>         public var certameTO:CertameTO;
>>>
>>>         public var areaAtuacao:AreaAtuacaoTO;
>>>
>>>         public var intNumeroSequencia:int;
>>>
>>>         public var intPaginaLivro:int;
>>>
>>>         public var vchNomeCandidato:String;
>>>
>>>         public var bitSituacao:Boolean;
>>>
>>>         public var texObservacao:String;
>>>
>>>         public function CandidatoTO()
>>>         {
>>>         }
>>>
>>>         public function readExternal(input:IDataInput):void
>>>         {
>>>             id = input.readObject() as Number;
>>>             certameTO = input.readObject() as CertameTO;
>>>             areaAtuacao = input.readObject() as AreaAtuacaoTO;
>>>             intNumeroSequencia = input.readObject() as int;
>>>             intPaginaLivro = input.readObject() as int;
>>>             vchNomeCandidato = input.readObject() as String
>>>             bitSituacao = input.readBoolean();
>>>             texObservacao = input.readObject() as String;
>>>         }
>>>
>>>         public function writeExternal(output:IDataOutput):void
>>>         {
>>>             output.writeObject(id);
>>>             output.writeObject(certameTO);
>>>             output.writeObject(areaAtuacao);
>>>             output.writeObject(intNumeroSequencia);
>>>             output.writeObject(intPaginaLivro);
>>>             output.writeObject(vchNomeCandidato);
>>>             output.writeObject(bitSituacao);
>>>             output.writeObject(texObservacao);
>>>         }
>>>     }
>>> }
>>>
>>> package br.org.oabgo.saeo.entidade
>>> {
>>>     import flash.utils.IDataInput;
>>>     import flash.utils.IDataOutput;
>>>     import flash.utils.IExternalizable;
>>>
>>>     [RemoteClass(alias="br.org.oabgo.saeo.entidade.AreaAtuacaoTO")]
>>>     [Bindable]
>>>     public class* AreaAtuacaoTO* implements IExternalizable
>>>     {
>>>
>>>         public var id:Number;
>>>
>>>         public var intCodigo:Number;
>>>
>>>         public var vchDescricao:String;
>>>
>>>         public function AreaAtuacaoTO()
>>>         {
>>>         }
>>>
>>>         public function readExternal(input:IDataInput):void
>>>         {
>>>             id = input.readObject() as Number;
>>>             intCodigo = input.readObject() as int;
>>>             vchDescricao = input.readObject() as String;
>>>         }
>>>
>>>         public function writeExternal(output:IDataOutput):void
>>>         {
>>>             output.writeObject(id);
>>>             output.writeObject(intCodigo);
>>>             output.writeObject(vchDescricao);
>>>         }
>>>
>>>     }
>>> }
>>>
>>> O erro ocorre quando eu trago todos os "Certames" cadastrados, vindos de
>>> um metodo List<CertamesTO>. Estou fazendo algo errado?
>>>
>>>  --
>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>>> Para enviar uma mensagem, envie um e-mail para [email protected]
>>> Para sair da lista, envie um email em branco para
>>> [email protected]
>>> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>>>
>>
>>
>>
>> --
>> Mario Junior
>> http://blog.mariojunior.com/
>> @mariojunior
>>
>>  --
>> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
>> Para enviar uma mensagem, envie um e-mail para [email protected]
>> Para sair da lista, envie um email em branco para
>> [email protected]
>> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>>
>
>  --
> Você recebeu esta mensagem porque está inscrito na lista "flexdev"
> Para enviar uma mensagem, envie um e-mail para [email protected]
> Para sair da lista, envie um email em branco para
> [email protected]
> Mais opções estão disponíveis em http://groups.google.com/group/flexdev
>



-- 
Mario Junior
http://blog.mariojunior.com/
@mariojunior

-- 
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para 
[email protected]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev

Responder a