Relacionamento no hibernate...ajuda

4 respostas
P

relacionamento no hibernate.

pessoal não conseguido relacionar dois objetos(tabelas) com o hibernate.

tenho duas tabelas simpes.

Cargos
campos(id_argo,nome)

Funcionario
campos(id_funcionario,nome,id_cargo)

Estou fazendo o cenario onde eu cadastro primeiro um cargo, e depois eu recupero este cargo p/ relacionar com funcionario.

Em codigo eu tenho isto para o relacionamento, consequentemente o meu Funcionario.hbm.xml

public class Funcionario {

Cargo cargo



/**

* @hibernate.many-to-one

* column=“id_cargo”

* class=“rodrigo.teste2.Cargo”

*/

public Cargo getCargo() {

return cargo;

}



}

Funcionario.hbm.xml

<?xml version="1.0"?>
< hibernate-mapping >

< class

name=“rodrigo.teste2.Funcionario”

table=“funcionario”

dynamic-update=“false”

dynamic-insert=“false”

>
< id
        name="id"
        column="id_funcionario"
        type="integer"
        unsaved-value="-1"
    >
        <generator class="increment">
        </generator>
    </id>

    < many-to-one
        name="cargo"
        class="meupacote.Cargo"
        cascade="none"
        outer-join="auto"
        update="true"
        insert="true"
        access="property"
        column="id_cargo"
    />

    < property
        name="nome"
        type="string"
        update="true"
        insert="true"
        access="property"
        column="nome"
    />

    <!--
        To add non XDoclet property mappings, create a file named
            hibernate-properties-Funcionario.xml
        containing the additional properties and place it in your merge dir.
    -->

< /class >

< /hibernate-mapping >

obs. Ambas as classes se encontram o mesmo no mesmo pacote.

Em teste eu tenho isto:

main() {

try 
     { 
     	
       Funcionario funcionario = new Funcionario();	              
        
       //carregado cargo - tudo ok   
       CargoDAO daoCargo = new CargoDAO();       
       
       // recupero um cargo
       List list = daoCargo.getList("from Cargo as vo where vo.id = '1'");
       
       Cargo cargo = (Cargo) list.get(0);
       
               // AQUI ELE LANÇA A SEGUINTE EXCEÇÃO:
       FuncionarioDAO dao = new FuncionarioDAO();

net.sf.hibernate.MappingException: An association from the table funcionario refers to an unmapped class: meupacote.Cargo
// AQUI ELE LANÇA A SEGUINTE EXCEÇÃO:

funcionario.setNome("FUNCIONARIO1");
       funcionario.setCargo(cargo);
       dao.insert(funcionario);
       
       

     } 
     catch(Exception e) 
     {    
       e.printStackTrace();//aqui vc vai saber que xabu é esse. 
     }

}

obs. Lembrando que cargo eu faço todas as operações de banco.

grato amigos.

4 Respostas

leonardom

Você criou o mapeamento para a classe Cargo?

P

Sim.
O problema não é com cargo.
Cargo eu persisto tranquilamente.
No cenario que eu comentei… eu preciso de um relacionamento em funcionario pois varios funcionario tem um cargo… ou seja many-to-one.
Ainda não tenho uma solução.

leonardom

Olhando no seus arquivos de mapeamento percebi que sua classe Funcionario esta no pacote rodrigo.teste2, mas observe esta parte do mapeamento:

< many-to-one
name="cargo"
class="meupacote.Cargo"
cascade="none"
outer-join="auto"
update="true"
insert="true"
access="property"
column="id_cargo"
/>

Se você disse que elas estão no mesmo pacote então o correto seria:

< many-to-one
name="cargo"
class="rodrigo.teste2.Cargo"
cascade="none"
outer-join="auto"
update="true"
insert="true"
access="property"
column="id_cargo"
/>
P

leonardom:
prg_rsa:

obs. Ambas as classes se encontram o mesmo no mesmo pacote.

Olhando no seus arquivos de mapeamento percebi que sua classe Funcionario esta no pacote rodrigo.teste2, mas observe esta parte do mapeamento:

< many-to-one
name="cargo"
class="meupacote.Cargo"
cascade="none"
outer-join="auto"
update="true"
insert="true"
access="property"
column="id_cargo"
/>

Se você disse que elas estão no mesmo pacote então o correto seria:

< many-to-one
name="cargo"
class="rodrigo.teste2.Cargo"
cascade="none"
outer-join="auto"
update="true"
insert="true"
access="property"
column="id_cargo"
/>

Bem observado leonardom.
Eu troquei o pacote p/ este post mas eles estao no mesmo diretorio, q seria rodrigo.teste2.
Mas isto não vem o caso.
Agora o que eu percebi eh q eu faço uma CONSULTA em vez de eu CARREGAR o objeto Cargo.

estou fazendo isto:
//carregado cargo - tudo ok
CargoDAO daoCargo = new CargoDAO();

// recupero um cargo
List list = daoCargo.getList(“from Cargo as vo where vo.id = ‘1’”);

Cargo cargo = (Cargo) list.get(0);

// AQUI ELE LANÇA A SEGUINTE EXCEÇÃO:
FuncionarioDAO dao = new FuncionarioDAO();

**** O CORRETO NÃO SERIA FAZER O LOAD??? ****

CargoDAO daoCargo = new CargoDAO();

CARGO cargo = (CARGO) daoCargo.recuperaCargo(Cargo.class, new Integer(1));

FuncionarioDAO dao = new FuncionarioDAO();

SERÁ QUE PODE SER ISTOOOOOOOOO!???

Criado 11 de novembro de 2004
Ultima resposta 11 de nov. de 2004
Respostas 4
Participantes 2