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
