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
