bom, como prometido aqui vai a solução para blazeds (não sei se nos outros vai ser dessa maneira)
no flex
public class Obra extends Vo
{
public var id:Number;
public var nome:String;
public var ativo:Boolean;
public var empresa:Empresa;
public var tipo: TipoObra;
[ArrayElementType("XXX.Site")]
public var sitesCollections:ArrayCollection;
[ArrayElementType("XXX.Equipamento")]
public var equipamentosCollections:ArrayCollection;
[ArrayElementType("XXX.PefilObra")]
public var usuariosCollections:ArrayCollection;
public function Obra()
{
}
depois no java
@FlexClass(classType = FlexClass.FlexClassType.RemoteObject)
public class ObraProxy extends Proxy<Obra> {
private long id;
private Obra obra;
private String nome;
private List<SiteProxy> sites;
private List<PerfilObraProxy> usuarios;
private List<EquipamentoProxy> equipamentos;
private TipoObraProxy tipo;
private EmpresaProxy empresa;
private ArrayCollection usuariosCollections;
private ArrayCollection equipamentosCollections;
private ArrayCollection sitesCollections;
private boolean ativo;
public ObraProxy() {
this.obra = new Obra();
}
public ObraProxy(Obra t) {
super(t);
}
@Override
public void copy(Obra t) {
this.setId(t.getId());
this.setNome(t.getNome());
this.setAtivo(t.isAtivo());
this.setTipo(new TipoObraProxy(t.getTipo()));
this.setUsuariosCollections((ArrayCollection) ConverteColecao.getInstance().converteToCollections(t.getUsuarios() == null ? null : t.getUsuarios(), PerfilObraProxy.class));
this.setSitesCollections((ArrayCollection) ConverteColecao.getInstance().converteToCollections(t.getSites() == null ? null : t.getSites(), SiteProxy.class));
this.setEquipamentosCollections((ArrayCollection) ConverteColecao.getInstance().converteToCollections(t.getEquipamentos() == null ? null : t.getEquipamentos(), EquipamentoProxy.class));
this.setEmpresa(t.getEmpresa() == null ? null : new EmpresaProxy(t.getEmpresa()));
}
@Override
public Obra copy() {
List<Site> auxSites = (List<Site>) ConverteColecao.getInstance().converteArrayCollection(getSitesCollections(), Site.class);
List<PerfilObra> auxUsuarios = (List<PerfilObra>) ConverteColecao.getInstance().converteArrayCollection(getUsuariosCollections(), PerfilObra.class);
List<Equipamento> auxEquipamentos = (List<Equipamento>) ConverteColecao.getInstance().converteArrayCollection(getEquipamentosCollections(), Equipamento.class);
this.obra.setId(this.id);
this.obra.setAtivo(true);
this.obra.setNome(this.nome);
this.obra.setTipo(this.tipo == null ? null : this.tipo.copy());
this.obra.setEmpresa(this.empresa == null ? null : this.empresa.copy());
this.obra.setUsuarios(auxUsuarios);
this.obra.setSites(auxSites);
this.obra.setEquipamentos(auxEquipamentos);
return this.obra;
}
//setters e getters aqui
depois eu tenho um método para converter
public List<?> converteArrayCollection (ArrayCollection arrayFlex, Class <?> classe){
List<Object> retorno = new ArrayList<Object>();
try {
for (Object item:arrayFlex){
Object itemNovo = classe.newInstance();
itemNovo=((Proxy)item).copy();
retorno.add(itemNovo);
}
}catch(Exception ex){
//System.out.println("erro na conversão da coleção");
}
return retorno;
}
Uma breve explicação:
No Java eu tenho classes proxys que fazem cópias das entidades (classes do banco) porque java+flex+blazeds tem um problema com lazy load, que quando voce “solicita” um objeto ele traz todos os objetos relacionados com o solicitado, mesmo que você não precise,
por exemplo tenho uma entidade usuario, uma obra e uma equipamentos.
quando vou fazer o login e solicito o objeto usuario ele traz (graças ao blazeds, porque, se eu não me engano, o graniteds já resolveu esse problema) os objetos obra (que está relacionado ao usuario) e equipamentos (que está relacionado as obras).
Quando envio os ArrayCollections para o java, converto eles para arraylist e envio para o meu objeto entidade. Depois salvo ele no banco de dados pelo hibernate normal.
Bom, se alguém tiver alguma duvida só gritar.