Mapeamento Hibernate

5 respostas
diogogama

Galera, é o seguinte, fiz um relacionamento com o hibernate de 1-1, e corrigi outros erros que apareceram, porém está acontecendo uma coisa estranha, ele insere os dados certinho no banco, mas o fk fica null.

Modelo Cliente

@Entity
public class Cliente {

    @Id 
    @GeneratedValue
    private Long id;
    private boolean juridica;
    private String nomeOuRazaoSocial;
    private String nomeFantasia;
    private String cpfOuCnpj;
    private String rgOuInscricaoEstadual;

    @Temporal(TemporalType.DATE)
    private Calendar dataNacimentoOuCriacaoEmpresa;

    @Temporal(TemporalType.DATE)
    private Calendar dataAdesao;

    private Double limite;
    private Double saldo;

    @OneToOne(mappedBy = "cliente", targetEntity = Endereco.class, fetch = FetchType.LAZY, cascade = javax.persistence.CascadeType.ALL)  
    private Endereco endereco;

//geters e setters
}
Modelo Endereco
@Entity
public class Endereco {

    @Id
    @GeneratedValue
    private Long id;
    private String rua;
    private String numero;
    private String complemento;
    private String bairro;
    private String cidade;
    private String estado;
    private String cep;
    private String pontoReferencia;

    @OneToOne
    @JoinColumn(name="cliente_id")
    private Cliente cliente;

//geters e setters
}
Hibernat.cfg.xml
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.connection.username">
      root
    </property>
    <property name="hibernate.connection.password">
    </property>
    <property name="hibernate.connection.url">
      jdbc:mysql://localhost/xxx
    </property>
    <property name="hibernate.connection.driver_class">
      com.mysql.jdbc.Driver
    </property>
    <property name="hibernate.dialect">
      org.hibernate.dialect.MySQL5InnoDBDialect
    </property>

    <property name="hibernate.hbm2ddl.auto">update</property>

    <property name="show_sql">true</property>
    <property name="format_sql">true</property>

    <!-- entidades -->
    <mapping class="br.com.xxx.model.Endereco" />
    <mapping class="br.com.xxx.model.Cliente" />
    <mapping class="br.com.xxx.model.DadosBancarios" />

  </session-factory>
</hibernate-configuration>
Alguém poderia me ajudar que ainda não consegui encontrar o porque?

5 Respostas

javaflex

Seria bom também postar o código da ação envolvida nesta inserção. Além disso, o comando SQL de INSERT ou UPDATE gerado Hibernate.

tmvolpato

Isso mesmo a parte da inserção é mto importante
pelo jeito o problema esta nela

diogogama
Segue o sql gerado pelo hibernate:
Hibernate: 
    insert 
    into
        Cliente
        (cpfOuCnpj, dataAdesao, dataNacimentoOuCriacaoEmpresa, juridica, limite, nomeFantasia, nomeOuRazaoSocial, rgOuInscricaoEstadual, saldo) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    insert 
    into
        DadosBancarios
        (cliente_id, codigoAgencia, codigoBanco, contaCorrente, dataAberturaConta, nomeAgencia, nomeBanco) 
    values
        (?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    insert 
    into
        Endereco
        (bairro, cep, cidade, cliente_id, complemento, estado, numero, pontoReferencia, rua) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?, ?)
Segue a classe de teste:
public static void main(String[] args) {
        
        Cliente cliente = new Cliente();
        
        cliente.setCpfOuCnpj("Teste CPF");
        Calendar date = new GregorianCalendar(2012, 11, 27);
        cliente.setDataAdesao(date);
        cliente.setDataNacimentoOuCriacaoEmpresa(date);
        cliente.setJuridica(true);
        cliente.setLimite(200.00);
        cliente.setNomeFantasia("Teste nome fantasia");
        cliente.setNomeOuRazaoSocial("Teste razao social");
        cliente.setRgOuInscricaoEstadual("teste rg ou inscrição");
        cliente.setSaldo(100.00);
        
        Endereco endereco = new Endereco();
        endereco.setBairro("teste Bairro");
        endereco.setCep("29070-110");
        endereco.setCidade("teste cidade");
        endereco.setComplemento("teste complemento");
        endereco.setEstado("teste estado");
        endereco.setNumero("00");
        endereco.setPontoReferencia("teste ponto de referencia");
        endereco.setRua("teste rua");
        
        cliente.setEndereco(endereco);
        
        DadosBancarios dadosBancarios = new DadosBancarios();
        dadosBancarios.setCodigoAgencia("teste agencia");
        dadosBancarios.setCodigoBanco("teste banco");
        dadosBancarios.setContaCorrente("teste conta");
        dadosBancarios.setNomeAgencia("teste nome agencia");
        dadosBancarios.setNomeBanco("teste nome banco");
        
        cliente.setDadosBancarios(dadosBancarios);

        new ClienteDao().salvar(cliente);
                
//        new EnderecoDao().salva(endereco);
   }
diogogama

Ninguém?

diogogama

Consegui galera, mas achei a solução estranha…

pra resolver o que fiz:

cliente.setEndereco(endereco);
endereco.setCliente(cliente);

Aí ele grava a chave estrangeira…

Isso tá certo?

Criado 12 de setembro de 2013
Ultima resposta 13 de set. de 2013
Respostas 5
Participantes 3