Hibernate.. one-to-one e cascade (duvida de iniciante)

2 respostas
G

Tenho a classe cliente com a referencia usuario
A tabela cliente com a coluna usuario
Há um mapeamento de usuario que funciona perfeitamente, sozinho

Problema: Quando dou uma inserção ele insere na coluna usuario valor 0, ou seja, nulo

<hibernate-mapping>

        <class name="helpdesk.bean.Cliente" table="cliente">
                <id name="id" column="id" type="long">
                        <generator class="native"/>
                </id>
                
                <property name="empresa" />
                <property name="responsavel"/>
                <property name="cidade"/>                
                <property name="telefone" />
                <property name="endereco"/>
                <property name="uf" type="helpdesk.persistencia.mapping.userType.UfUserType"/>                            
                <one-to-one class="helpdesk.bean.Usuario" name="usuario" cascade="all" />
                
                
        </class>

</hibernate-mapping>
public static void testeCliente(){              
        
        Cliente obj = new Cliente();
        
        obj.setEmpresa("MicoSoft");
        obj.setResponsavel("Billy Doors");
        obj.setCidade("Itú");
        obj.setTelefone("222-2222");
        obj.setEndereco("rua lalala");
        obj.setUf(Estado.DF);
        obj.setUsuario(new Usuario());
        obj.getUsuario().setEmail("[email removido]");
        obj.getUsuario().setAcesso(Acesso.CLIENTE);
        obj.getUsuario().setSenha("456");
        
    
        GenericDAO dao = new UsuarioDAO(HibernateUtil.currentSession());
        HibernateUtil.currentSession().beginTransaction();
        try{                                                                             
             dao.persist(obj);
             System.out.println(obj.getUsuario().getId()); //ta imprimindo a chave gerada pelo native aqui
             HibernateUtil.currentSession().flush();             
         }catch (Exception e){
             HibernateUtil.currentSession().getTransaction().rollback();
             System.out.println(e);
             e.printStackTrace();
         }
         finally {
             HibernateUtil.currentSession().getTransaction().commit();
         }
}

Todos os outros valores estão sendo inseridos corretamente, exceto a coluna usuario, chave estrangeira, que está com problema

2 Respostas

wellington_marinheir

Em que momento voce está fazendo referencia à coluna Usuario na sua aplicação que cria o cliente e usuario?

G

Resolvido :oops:
Ok, mas mapear relação um-para-um com tag many-to-one é completamente não intuitivo

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

        <class name="helpdesk.bean.Cliente" table="cliente">
                <id name="id" column="id" type="long">
                        <generator class="native"/>
                </id>
                
                <many-to-one class="helpdesk.bean.Usuario" column="usuario" name="usuario" cascade="all" foreign-key="usuario"/>
                                
                <property name="empresa" />
                <property name="responsavel"/>
                <property name="cidade"/>                
                <property name="telefone" />
                <property name="endereco"/>
                <property name="uf" type="helpdesk.persistencia.mapping.userType.UfUserType"/>                            
                
                
                
        </class>

</hibernate-mapping>
Criado 13 de novembro de 2006
Ultima resposta 13 de nov. de 2006
Respostas 2
Participantes 2