Hibernate - Foreign key

2 respostas
V

Tenho 2 tabelas

Produto

@Entity 
public class Produto {
private Long   idProduto;
private String descricaoProduto;
    private TipoProduto idTipoProduto;


@Id 
public Long getIdProduto() {
	return idProduto;
}
public void setIdProduto(Long idProduto) {
	this.idProduto = idProduto;
}

@Column(name="descricao", length=50)
public String getDescricao() {
	return descricaoProduto;
}
public void setDescricao(String descricao) {
	this.descricaoProduto = descricao;
}

  
    @ManyToOne 
    @JoinColumn(name="IDTIPOPRODUTO")
public TipoProduto getIdTipoProduto() {
	return idTipoProduto;
}
public void setIdTipoProduto(TipoProduto idTipoProduto) {
	this.idTipoProduto = idTipoProduto;
}

}

TipoProduto

@Entity

public class TipoProduto {

private Long idTipoProduto;

private String  descricaoTipoProduto;
@Column(name="descricao", length=30)
public String getDescricao() {
	return descricaoTipoProduto;
}
public void setDescricao(String descricao) {
	this.descricaoTipoProduto = descricao;
}


@Id 
public Long getIdTipoProduto() {
	return idTipoProduto;
}
public void setIdTipoProduto(Long idTipoProduto) {
	this.idTipoProduto = idTipoProduto;
}

}

Qdo tento gravar um registro na tabela de produtos ele da a msg abaixo…Se retirar o campo idtipoproduto da tabela de produto
funciona legal…Se alguém souber agradeço, já li vários tutoriais mas não consigo fazer rodar…

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: BeanUtils.populate

org.apache.struts.util.RequestUtils.populate(RequestUtils.java:497)

org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:798)

org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:205)

org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)

org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)

javax.servlet.http.HttpServlet.service(HttpServlet.java:689)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

java.lang.IllegalArgumentException: argument type mismatch

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

java.lang.reflect.Method.invoke(Method.java:585)

org.apache.commons.beanutils.PropertyUtils.setSimpleProperty(PropertyUtils.java:1789)

org.apache.commons.beanutils.PropertyUtils.setNestedProperty(PropertyUtils.java:1684)

org.apache.commons.beanutils.PropertyUtils.setProperty(PropertyUtils.java:1713)

org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:1019)

org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)

org.apache.struts.util.RequestUtils.populate(RequestUtils.java:495)

org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:798)

org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:205)

org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)

org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)

javax.servlet.http.HttpServlet.service(HttpServlet.java:689)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.8 logs.
Apache Tomcat/5.5.8

2 Respostas

Mauricio_Linhares

Não sei se você percebeu, mas não tem nenhuma classe do Hibernate aí, o que provavelmente significa que o erro não é o save() do Hibernate e sim em outro lugar.

Por essa mensagem:

java.lang.IllegalArgumentException: argument type mismatch

Deve ser alguma coisa que ele está tentando colocar no seu ActionForm que está com o tipo errado.

V

Oi Mauricio, obrigado por responder…

Descobri o que estava errado…

No form de cadastro eu estava pedindo o atributo “tipo de produto” no caso, como codigo , e qdo chegava na action dava problema já que ele estava esperando um objeto tipoproduto e nao um Integer , entendeu ???

Neste caso , como vc faz ?? cria como Integer mesmo ou como objeto ???

Vc sabe se por exemplo eu pesquisar um objeto produdo se o Hibernate já traria o atributo tipoProduto preenchido ???

Valeu !!!

Criado 1 de junho de 2005
Ultima resposta 4 de jun. de 2005
Respostas 2
Participantes 2