Erro Hibernate

10 respostas
ezem.rs

Olá, estou usando o hibernate pela primeira vez, sendo que esta dando esse erro. Alguem saberia me dizer o que pode ser?

INFO: Not binding factory to JNDI, no JNDI name configured Jul 30, 2013 7:16:41 PM org.hibernate.type.NullableType nullSafeSet INFO: could not bind value 'Classes.Departamento@192a441' to parameter: 1; Classes.Departamento cannot be cast to java.lang.Integer Exception in thread "main" java.lang.ClassCastException: Classes.Departamento cannot be cast to java.lang.Integer at org.hibernate.type.IntegerType.set(IntegerType.java:41)

Obrigado,

10 Respostas

A

Isto é falha de conversão de tipo.

você está tentando converter algum valor para Integer que não pode ser realizado.

posta o código da classe Departamento.

Henrique.tenorio

Morfando um objeto Departamento para Integer em 3, 2, 1… Exception in thread “main” java.lang.ClassCastException, #fail.

ezem.rs

Segue o código da Classe Departamento. Essa classe foi gerada a partir da tabela Departamento, conforme figura em anexo.

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity(name="Departamento")
public class Departamento  implements java.io.Serializable {

     @Id
     @GeneratedValue
     private Integer id;
     private String nomDep;

    public Departamento() {
    }
    public Departamento(String nomDep) {
       this.nomDep = nomDep;
    }  
    public Integer getId() {
        return this.id;
    }    
    public void setId(Integer id) {
        this.id = id;
    }
    public String getNomDep() {
        return this.nomDep;
    }    
    public void setNomDep(String nomDep) {
        this.nomDep = nomDep;
    }
}

romarcio

Se concentre na exceção: Classes.Departamento cannot be cast to java.lang.Integer

Veja que você está tentando inserir em uma variável do tipo Integer um objeto Departamento. O que você precisa aqui é pegar o id do departamento para inserir e não o objeto Departamento. Use o método getId() de departamento para inserir o valor do id na variável Integer .

ezem.rs

Olá, desde já obrigado pela atenção.

Abaixo esta minha classe principal onde fiz alguns exemplo. Acredito que o problema esta nas linhas 13 e 17, ou seja, f1.setDepartamentoId(d1); e f2.setDepartamentoId(d2);
O campo DepartamentoI é pra ser a chave estrangeira no banco, ou seja, é pra gravar o ID do Departamento desse funcionario. Segundo a orientação que esta no link abaixo, para referenciar a chave estrangeria seria simplesmente apontar o objeto.

Esta correto isso?

h[url]ttps://www.youtube.com/watch?v=FvNc1tNLd7o[/url]

public static void main(String[] args) {
        Departamento d1= new Departamento();
        Departamento d2= new Departamento();
        
        d1.setNomDep("Compras");
        d2.setNomDep("Vendas");
        
        Funcionario f1=new Funcionario();
        Funcionario f2=new Funcionario();
        
        f1.setCpf("[telefone removido]");
        f1.setNome("JOAO DA SILVA");
        f1.setDepartamentoId(d1);
        
        f2.setCpf("888888888888");
        f2.setNome("MARIA APARECIDA");
        f2.setDepartamentoId(d2);
        
        Session s= HibernateUtil.getSessionFactory().getCurrentSession();
        s.beginTransaction();
        s.save(d1);
        s.save(d2);
        s.save(f1);
        s.save(f2);
        s.getTransaction().commit();
    }
}
romarcio

Posta a sua classe Funcionario, preciso saber como você declarou departamento nela.

ezem.rs

Segue abaixo a Classe Funcionario.
Obrigado.

package Classes;
// Generated 30/07/2013 18:30:59 by Hibernate Tools 3.2.1.GA

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;

@Entity(name="Funcionario")
public class Funcionario  implements java.io.Serializable {
     @Id
     @GeneratedValue
     private Integer id;
     private Departamento departamentoId;
     private String cpf;
     private String nome;
    public Funcionario() {
    }
    public Funcionario(Departamento departamentoId) {
        this.departamentoId = departamentoId;
    }
    public Funcionario(Departamento departamentoId, String cpf, String nome) {
       this.departamentoId = departamentoId;
       this.cpf = cpf;
       this.nome = nome;
    }
   public Integer getId() {
        return this.id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Departamento getDepartamentoId() {
        return this.departamentoId;
    }
    
    public void setDepartamentoId(Departamento departamentoId) {
        this.departamentoId = departamentoId;
    }
    public String getCpf() {
        return this.cpf;
    }
    
    public void setCpf(String cpf) {
        this.cpf = cpf;
    }
    public String getNome() {
        return this.nome;
    }
    
    public void setNome(String nome) {
        this.nome = nome;
    }

}
S

brother,se tu está aprendendo com esse video ai,uma dica que eu te passo é baixar a apostila fj-28 e seguir ela,flw

S
ezem.rs:
f2.setDepartamentoId(d2);

Num é porque você está setando objeto de departamento no id funcionario que é inteiro não?

poderia fazer

f2.setDepartamentoId(d2.getDepartamentoId)
acho que é isso né ....
romarcio
@Entity(name="Funcionario")  
public class Funcionario  implements java.io.Serializable {  
     @Id  
     @GeneratedValue  
     private Integer id;  
     private Departamento departamentoId; 
//....

Já tinha tocado nesse assunto, se você tem um objeto Departamento, não pode setar um Integer. Tem que setar um objeto departamento.
E outra coisa, se departamento é uma objeto que representa uma relacionamento 1-n, mapeia ele como tal.

@Entity(name="Funcionario")  
public class Funcionario  implements java.io.Serializable {  
     @Id  
     @GeneratedValue  
     private Integer id; 
     @ManyToOne
     @JoinColumn(name = "FK_ID_DEPARTAMENTO")
     private Departamento departamentoId;
Criado 30 de julho de 2013
Ultima resposta 31 de jul. de 2013
Respostas 10
Participantes 5