Java x Flex - Retorno do java - Campo do tipo ArrayCollection vem com itens do tipo Object

2 respostas
cristianovieira

Olá boa noite, me deparei com um problema muito estranho, tenho 1 relacionamento de Funcionario para HistSalarial (1xN) assim como Pessoa para Telefone, etc… etc… hoje quando fui implementar a classe HistSalarial vi que os objetos que estão vindo do java para o flex não são identificados com o tipo correto (tipo HistSalarial), segue as classes:

Funcionario - Java

@Entity
@Table(name="funcionario", schema="public")
public class Funcionario extends Pessoa {
    @OneToMany(mappedBy="funcionario")
    @Cascade(CascadeType.ALL)
    private List<HistSalarial> histsalarial; 
}

HistSalarial - Java

@Entity
@Table(name="histsalarial", schema="public")
public class HistSalarial {
	@Column(name="hisa_salatual", precision=2, nullable=false)
	private Double hisa_salatual;
	 
	@Column(name="hisa_salnovo", precision=2, nullable=false)
	private Double hisa_salnovo;
	 
	@Column(name="hisa_dtalteracao", nullable=false)
	@Temporal(TemporalType.DATE)
	private Date hisa_dtalteracao;
	 
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="pess_id", updatable=true, insertable=true)
    @Fetch(FetchMode.JOIN)
	private Funcionario funcionario;
}

AS de Funcionario

package aplicacao.pessoa.classes
{
	import mx.collections.ArrayCollection;	
	
	[RemoteClass(alias="modelo.dto.Funcionario")]
	public class Funcionario extends Pessoa {		
	    public var func_tipo:Number;	 
	    public var func_funcao:String;
	    public var func_dtadmissao:Date;
	    public var func_dtdemissao:Date;	
	    public var func_valorsal:Number;	        	
	    public var histsalarial:ArrayCollection;	 	 

	}
}

AS de HistSalarial

package aplicacao.histsalarial.classe
{
	import aplicacao.pessoa.classes.Funcionario;
	import aplicacao.usuario.classe.Usuario;
	    
	[RemoteClass(alias="modelo.dto.HistSalarial")]	 		     
	public class HistSalarial {	
		public var hisa_id:Number;		
		public var hisa_salatual:Number;		
		public var hisa_salnovo:Number;
		public var hisa_dtalteracao:Date;
		public var funcionario:Funcionario;
	    public var usuario:Usuario;
	}	
}

Pois bem, eu “consegui resolver o problema” paliativamente instanciando uma variavel do tipo HistSalarial, ou seja, qnd eu retiro essa variavel o retorno vem certo, quando eu n intancio o retorno vem como Object, ja passou por isso ?? Me da uma luz que não tenho a minima ideia do que ta acontecendo. Segue a solução abaixo:

private var temp:HistSalarial; //SEM ESSA VARIAVEL O RETORNO DO HISTORICO VEM COMO OBJECT

2 Respostas

Bruno_Cunha

Tente usar o ArrayElementType para forçar a tipagem, e remova a sua variável “temp”.

[ArrayElementType("aplicacao.histsalarial.classe.HistSalarial")] 
        public var histsalarial:ArrayCollection;
F

cristianovieira,
Esta variável do tipo da classe q vc precisa é necessário para o compilador saber q precisa “levar” esta classe junto e com isso vim tipada corretamente.
Vc tb pode usar flash.net.registerClassAlias para informar ao compilador o q ele precisa “levar”.

Alguns exemplos:
http://fabiophx.blogspot.com/2009/04/criacao-dinamica-de-objetos.html
http://fabiophx.blogspot.com/2010/12/criacao-dinamica-de-objetos-com-rsl.html
http://fabiophx.blogspot.com/2011/01/criacao-dinamica-exemplo-pratico.html

[]s

Criado 12 de fevereiro de 2012
Ultima resposta 14 de fev. de 2012
Respostas 2
Participantes 3