Java.lang.IllegalArgumentException: Can not set java.lang.Integer field br... to java.lang.Integer

1 resposta
T

O meu problema é o seguinte, tenho uma classe que tem muitos relacionamentos de dependências e chaves estrangeiras. Todos os relacionamentos funcionam porém um atributo do tipo java.lang.Integer que é chave unica da classe está me trazendo dores de cabeça intermináveis.

Segue minha classe :

/**
 * 
 * @author tiago
 */
@Entity
@Table(name = "comunicacao", schema="comunicacaointerna",
		uniqueConstraints={@UniqueConstraint(columnNames={ "connumero", "conloccodigo", "conrefano" })})
public class Comunicacao implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	@SequenceGenerator(sequenceName="comunicacaointerna.comunicacao_concodigo_seq", name = "comunicacao_concodigo_seq")
	@Id @GeneratedValue(generator="comunicacao_concodigo_seq")
	@Column(name = "concodigo", nullable = false)
	private Integer codigo;

	@Column(name = "contexto")
	private String texto;
	
	@Column(name = "connumero", nullable = false)
	private Integer numero;
	
	@ManyToOne
	@JoinColumn(name = "conloccodigo", nullable = false)
	private LocalidadeComunicacao localidadeRedigente;

	@ManyToOne
	@JoinColumn(name = "conrefano", referencedColumnName = "refano")
	private Referencia referencia;
	
	@Column(name = "condata", nullable = false)
	@Temporal(TemporalType.TIMESTAMP)
	private Date data;
	
	@Column(name = "convisaoremetente")
	private TipoVisaoComunicacao visaoRemetente;

	@Column(name = "convisaodestinatario")
	private TipoVisaoComunicacao visaoDestinatario;
	
	@Column(name = "confinalizada")
	private Boolean finalizada;
	
	@ManyToOne
	@JoinColumn(name = "conasscodigo", referencedColumnName = "asscodigo")
	private Assunto assunto;
	
	@OneToMany( mappedBy = "comunicacao")
	private List<ComunicacaoRespostas> respostas;
	
	@OneToOne(optional=true, mappedBy = "resposta")
	private ComunicacaoRespostas comunicacaoResposta;
	
	@OneToMany( mappedBy = "comunicacao")
	private List<ComunicacaoAnexos> anexos;
	
	@OneToMany( mappedBy = "comunicacao")
	private List<ComunicacaoRemetenteDestinatario> remetenteDestinatarioList;
	
	@OneToMany( mappedBy = "comunicacao")
	@OrderBy("codigo")
	private List<ComunicacaoEstado> comunicacaoEstadoList;

	
	
	public Comunicacao() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Comunicacao(Integer codigo) {
		super();
		this.codigo = codigo;
	}

	public Comunicacao(Integer numero,
			LocalidadeComunicacao localidadeRedigente, Referencia referencia) {
		super();
		this.numero = numero;
		this.localidadeRedigente = localidadeRedigente;
		this.referencia = referencia;
	}

	/**
	 * @return the codigo
	 */
	public Integer getCodigo() {
		return codigo;
	}

	/**
	 * @param codigo the codigo to set
	 */
	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}

	/**
	 * @return the numero
	 */
	public Integer getNumero() {
		return numero;
	}

	/**
	 * @param numero the numero to set
	 */
	public void setNumero(Integer numero) {
		this.numero = numero;
	}

/** aqui entra os get e set restante que estão escritos corretamente **/

}

E agora o stacktrace:

com.sun.faces.mgbean.ManagedBeanCreationException: Cant instantiate class: br.edu.uniformg.controle.ComunicacaoFacade.

at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:193)

at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:105)

at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:369)

at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:222)

at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:88)

at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)

at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:73)

at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:45)

at org.apache.el.parser.AstValue.getValue(AstValue.java:86)

at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)

at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)

at javax.faces.component.UIData.getValue(UIData.java:608)

at org.ajax4jsf.component.UIDataAdaptor.getValue(UIDataAdaptor.java:1459)

at org.ajax4jsf.component.SequenceDataAdaptor.getDataModel(SequenceDataAdaptor.java:70)

at org.ajax4jsf.component.SequenceDataAdaptor.createDataModel(SequenceDataAdaptor.java:64)

at org.ajax4jsf.component.UIDataAdaptor.getExtendedDataModel(UIDataAdaptor.java:592)

at org.ajax4jsf.component.UIDataAdaptor.walk(UIDataAdaptor.java:994)

at org.richfaces.renderkit.AbstractRowsRenderer.encodeRows(AbstractRowsRenderer.java:107)

at org.richfaces.renderkit.AbstractRowsRenderer.encodeRows(AbstractRowsRenderer.java:92)

at org.richfaces.renderkit.AbstractRowsRenderer.encodeChildren(AbstractRowsRenderer.java:139)

at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:826)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:936)

at javax.faces.render.Renderer.encodeChildren(Renderer.java:148)

at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:826)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:936)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:942)

at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:577)

at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)

at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:216)

at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)

at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)

at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)

at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)

at java.lang.Thread.run(Unknown Source)

Caused by: javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of br.edu.uniformg.comunicacaointerna.entidade.Comunicacao.numero

at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:630)

at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:75)

at br.edu.uniformg.comunicacaointerna.modelo.ComunicacaoDAO.listaComunicacaoLocalidade(ComunicacaoDAO.java:101)

at br.edu.uniformg.comunicacaointerna.modelo.ComunicacaoDAO.listaComunicacaoRecebidasLocalidade(ComunicacaoDAO.java:106)

at br.edu.uniformg.controle.ComunicacaoFacade.listarRecebidasPendentes(ComunicacaoFacade.java:41)

at br.edu.uniformg.controle.ComunicacaoFacade.(ComunicacaoFacade.java:34)

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)

at java.lang.reflect.Constructor.newInstance(Unknown Source)

at java.lang.Class.newInstance0(Unknown Source)

at java.lang.Class.newInstance(Unknown Source)

at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:188)

 48 more

Caused by: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of br.edu.uniformg.comunicacaointerna.entidade.Comunicacao.numero

at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:35)

at org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValue(AbstractComponentTuplizer.java:64)

at org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValues(AbstractComponentTuplizer.java:70)

at org.hibernate.tuple.component.PojoComponentTuplizer.getPropertyValues(PojoComponentTuplizer.java:86)

at org.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:353)

at org.hibernate.type.ComponentType.getHashCode(ComponentType.java:184)

at org.hibernate.engine.EntityUniqueKey.generateHashCode(EntityUniqueKey.java:63)

at org.hibernate.engine.EntityUniqueKey.(EntityUniqueKey.java:44)

at org.hibernate.type.EntityType.loadByUniqueKey(EntityType.java:596)

at org.hibernate.type.EntityType.resolve(EntityType.java:382)

at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:116)

at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854)

at org.hibernate.loader.Loader.doQuery(Loader.java:729)

at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)

at org.hibernate.loader.Loader.doList(Loader.java:2220)

at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)

at org.hibernate.loader.Loader.list(Loader.java:2099)

at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)

at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)

at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)

at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)

at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)

at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:66)

 59 more

Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Integer field br.edu.uniformg.comunicacaointerna.entidade.Comunicacao.numero to java.lang.Integer

at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)

at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)

at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(Unknown Source)

at sun.reflect.UnsafeObjectFieldAccessorImpl.get(Unknown Source)

at java.lang.reflect.Field.get(Unknown Source)

at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:32)

 81 more

Esse problema acontece sempre que dou um merge no objeto comunicação ou tento fazer uma consulta na tabela listando os resultados.
Consigo persistir numa boa.

1 Resposta

R
Tente fazer assim,
@Entity  
@Table(name = "comunicacao", schema="comunicacaointerna")  
@org.hibernate.annotations.Table(appliesTo="comunicacao", indexes= 
	@org.hibernate.annotations.Index(
			columnNames={ "connumero", "conloccodigo", "conrefano" }))

Desta forma vc vai usar as anotações do Hibernate e não do javax.persistence.

Espero ter ajudado,

Rodrigo.
Criado 12 de março de 2008
Ultima resposta 12 de mar. de 2008
Respostas 1
Participantes 2