Exception when trying to instantiate Target ao tentar salvar os dados no banco

Galera Beleza?

to criando um projeto pra faculdade (Isso já diz o quão iniciante sou) e na hora de gravar os dados no Banco de dado ele ta me dando uma Exception que já tentei de tudo para resolver e agora recorro aos senhores.

Classe Model:

package br.com.guide10.models;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.validator.constraints.NotBlank;

/**
 *
 * @author wesll
 */
@Entity
@Table(name = "c_compguide")

public class ComposicaoModel {


@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int idGuide;


@NotBlank
private String guide;


@ManyToOne
@JoinColumn(name = "idCurso")
private CursoModel curso;


@OneToOne (mappedBy = "guide")
private AvaliacaoModel avaliacao;


public int getIdGuide() {
	return idGuide;
}


public void setIdGuide(int idGuide) {
	this.idGuide = idGuide;
}


public String getGuide() {
	return guide;
}


public void setGuide(String guide) {
	this.guide = guide;
}


public CursoModel getCurso() {
	return curso;
}


public void setCurso(CursoModel curso) {
	this.curso = curso;
}


public AvaliacaoModel getAvaliacao() {
	return avaliacao;
}


public void setAvaliacao(AvaliacaoModel avaliacao) {
	this.avaliacao = avaliacao;
}

}

Classe Controller:

package br.com.guide10.controller;

import java.util.List;

import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.Query;

import br.com.caelum.vraptor.Controller;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.validator.Validator;
import br.com.guide10.business.CursoBO;
import br.com.guide10.models.ComposicaoModel;

@Controller
public class ComposicaoController {
	@Inject
	private EntityManager entityManager;
	
	@Inject
	private Result result; 
	
	@Inject
	private Validator validator;
	
	private CursoBO cursoBO;
	
	public void list () {
		Query query = this.entityManager.createQuery("from ComposicaoModel");
		List<ComposicaoModel> composicao = query.getResultList();
		result.include("composicao", composicao);
	}
	
	public void edit(ComposicaoModel composicao) {
		cursoBO =  new CursoBO();
		result.include("cursos", cursoBO.getListCurso(entityManager));
		result.include("composicao", composicao);
	}
	
	public void save (ComposicaoModel composicao) {
		validator.validate(composicao);
		validator.onErrorForwardTo(this).edit(composicao);
		
		
		if(composicao.getIdGuide()==0) {
			create(composicao);
		}else {
			update(composicao);
		}
	}
	public void create(ComposicaoModel composicao) {
		this.entityManager.persist(composicao);
		result.forwardTo(this).edit(null);
	}
	public void read(ComposicaoModel composicao) {
		composicao = this.entityManager.find( ComposicaoModel.class, composicao.getIdGuide() );
		result.forwardTo(this).edit(composicao);
	}
	public void update (ComposicaoModel composicao) {
		this.entityManager.merge(composicao);
		result.forwardTo(this).edit(null);
	}
	public void delete (ComposicaoModel composicao) {
	 composicao	= this.entityManager.find(ComposicaoModel.class, composicao.getIdGuide());
	this.entityManager.remove(composicao);
	result.forwardTo(this).list();
	}
}

E o Erro em questão ocorre quando estou adicionando este trecho ao meu JSP:

<select name="composicao.curso.idCurso">
				<c:forEach items="${cursos}" var="curso">
				
				
				<option value="curso.idCurso" <c:if test="${curso.idCurso == composicao.curso.idCurso}">SELECTED</c:if> >${curso.nomeCurso}</option>
				
				
				</c:forEach>

Erro:

abr 11, 2020 2:28:13 AM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [default] in context with path [/guide10] threw exception
br.com.caelum.vraptor.http.InvalidParameterException: Exception when trying to instantiate Target(name=composicao, type=class br.com.guide10.models.ComposicaoModel)
	at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator.handleException(VRaptorInstantiator.java:129)
	at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator.handleException(VRaptorInstantiator.java:131)
	at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator.instantiate(VRaptorInstantiator.java:123)
	at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator.instantiate(VRaptorInstantiator.java:115)
	at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator$Proxy$_$$_WeldClientProxy.instantiate(Unknown Source)
	at br.com.caelum.vraptor.http.iogi.IogiParametersProvider.instantiateOrAddError(IogiParametersProvider.java:87)
	at br.com.caelum.vraptor.http.iogi.IogiParametersProvider.instantiateParameters(IogiParametersProvider.java:80)
	at br.com.caelum.vraptor.http.iogi.IogiParametersProvider.getParametersFor(IogiParametersProvider.java:72)
	at br.com.caelum.vraptor.http.iogi.IogiParametersProvider$Proxy$_$$_WeldClientProxy.getParametersFor(Unknown Source)
	at br.com.caelum.vraptor.observer.ParametersInstantiator.getParametersForCurrentMethod(ParametersInstantiator.java:149)
	at br.com.caelum.vraptor.observer.ParametersInstantiator.instantiate(ParametersInstantiator.java:89)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
	at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)
	at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
	at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)
	at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
	at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)
	at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)
	at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)
	at org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.start(DefaultInterceptorStack.java:90)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack$Proxy$_$$_WeldClientProxy.start(Unknown Source)
	at br.com.caelum.vraptor.observer.RequestHandlerObserver.handle(RequestHandlerObserver.java:93)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
	at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)
	at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
	at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)
	at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
	at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)
	at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)
	at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)
	at org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:123)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:688)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1594)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at net.vidageek.mirror.provider.java.PureJavaMethodReflectionProvider.invoke(PureJavaMethodReflectionProvider.java:38)
	at net.vidageek.mirror.invoke.MethodHandlerByMethod.withArgs(MethodHandlerByMethod.java:54)
	at br.com.caelum.iogi.reflection.NewObject$Setter.set(NewObject.java:87)
	at br.com.caelum.iogi.reflection.NewObject.setProperty(NewObject.java:59)
	at br.com.caelum.iogi.reflection.NewObject.populateProperties(NewObject.java:52)
	at br.com.caelum.iogi.reflection.NewObject.valueWithPropertiesSet(NewObject.java:42)
	at br.com.caelum.iogi.ObjectInstantiator.instantiate(ObjectInstantiator.java:35)
	at br.com.caelum.iogi.MultiInstantiator.instantiate(MultiInstantiator.java:20)
	at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator.instantiate(VRaptorInstantiator.java:121)
	at br.com.caelum.iogi.reflection.NewObject.setProperty(NewObject.java:58)
	at br.com.caelum.iogi.reflection.NewObject.populateProperties(NewObject.java:52)
	at br.com.caelum.iogi.reflection.NewObject.valueWithPropertiesSet(NewObject.java:42)
	at br.com.caelum.iogi.ObjectInstantiator.instantiate(ObjectInstantiator.java:35)
	at br.com.caelum.iogi.MultiInstantiator.instantiate(MultiInstantiator.java:20)
	at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator.instantiate(VRaptorInstantiator.java:121)
	... 57 more

Qual ação vc tentou executar que deu essa exception?

@Lucas_Camara eu Tenho uma pagina que cadastra descrições e vincula essa descrição a um curso, quando eu clico pra salvar que chama o método save do Controller e da o Erro.

Para teste, mude de:

private int idGuide;

Para:

private Long idGuide;

e tente novamente (não se esqueça de alterar os métodos get e set desse atributo.

@Lucas_Camara Mesmo erro,

a classe ficou assim pra você confirmar que fiz certo.

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idGuide;

public void setIdGuide(Long idGuide) {
		this.idGuide = idGuide;
	}

public Long getIdGuide() {
		return idGuide;
	}

Tem mais alguma classe model usando algum atributo como int? Se tiver, mude todos para Long.

1 curtida

@Lucas_Camara Cara deu certo, apesar de que o validator ta apresentando outro erro, dizendo que o numero IdCurso não é um numero valido mas acho que isso é algum erro meu, agora queria saber se sabe me explicar o como tu sacou que era isso e o por que disso ?

Toda informação que vem da tela vem como String e é convertida para o tipo definido nos parâmetros (no seu caso os atributos da classe ComposicaoModel). Como vi que vc estava usando int para o ID e vc disse que estava salvando um novo objeto (que até salvar, não tem ID atribuído), pensei que o valor que estaria vindo da tela para preencher o ID seria uma string vazia "", que não é compatível para ser convertido para um valor inteiro.