1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

relacionamento OneToOne

Boa tarde.. Estou com um problema fazendo persistência com hibernate, não está indo de jeito nenhum se alguem puder mim ajudar em agradeço muito, ja ta mim tirando o sono.kk

Tenho duas tabelas no banco de dados cliente e endereço,, endereco leva uma chave estrangeira de cliente e o relacionamento é um para um

vou postar minhas tabelas do banco de dados;

create table cliente(

cod_cliente int auto_increment,
nome varchar(200),
primary key(cod_cliente)
);


create table endereco(
cod_cliente int,
descricao text,
primary key(cod_cliente),
foreign key cod_cliente(cod_cliente) references cliente(cod_cliente)
);

as classes que quero fazer a persistência ta assim.

@Entity
@Table(name = "cliente")
public class Cliente implements Serializable {

    private static final long serialVersionUID = -2741379887456017048L;

    @Id
    @GeneratedValue
    @Column(name = "cod_cliente", nullable = false)
    private Integer cod_cliente;

    @OneToOne
    @PrimaryKeyJoinColumn
    private Endereco endereco;

    @Column(name = "nome", nullable = false)
    private String nome;

    public Integer getCod_cliente() {
        return cod_cliente;
    }

    public void setCod_cliente(Integer cod_cliente) {
        this.cod_cliente = cod_cliente;
    }

    public Endereco getEndereco() {
        return endereco;
    }

    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

           //get e set
           //equals e hashcode



}
@Entity
@Table(name = "endereco")
public class Endereco implements Serializable {

    private static final long serialVersionUID = 8500332593690763226L;

    @Id
    @Column(name = "cod_cliente")
    @GeneratedValue(generator = "foreign")
    @GenericGenerator(name = "foreign", strategy = "foreign", parameters = @Parameter(name = "property", value = "cliente"))
    private Integer codigo_cliente;

    @OneToOne(mappedBy = "endereco")
    private Cliente cliente;

    @Column(name = "descricao")
    private String descricao;

     //get e set
     //equals e hashcode



}

A minha classe de teste ta assim:

public class Teste {

    public static void main(String[] args) {

        Conecta.conecta().openSession();

        Cliente cliente = new Cliente();
        ClienteDAO clienteDAO = new ClienteDAO();

        Endereco endereco = new Endereco();
        EnderecoDAO enderecoDAO = new EnderecoDAO();

        cliente.setNome("fabio");
        endereco.setDescricao("agora vai");

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

        clienteDAO.salvar(cliente);
        enderecoDAO.salvar(endereco);

    }

}

sempre que vou salvar na base de dados aparece uma mensagem que a chave ta nula dai ela não salva nada mas não consigo identificar o erro de jeito nenhum.

O erro que aparece é esse:

Hibernate: insert into cliente (nome) values (?) [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1452, SQLState: 23000 [main] ERROR org.hibernate.util.JDBCExceptionReporter - Cannot add or update a child row: a foreign key constraint fails (locadora2.cliente, CONSTRAINT FK334B85FA21E8E374 FOREIGN KEY (cod_cliente) REFERENCES endereco (cod_cliente)) Hibernate: insert into cliente (nome) values (?) [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1452, SQLState: 23000 [main] ERROR org.hibernate.util.JDBCExceptionReporter - Cannot add or update a child row: a foreign key constraint fails (locadora2.cliente, CONSTRAINT FK334B85FA21E8E374 FOREIGN KEY (cod_cliente) REFERENCES endereco (cod_cliente))

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags java-ee java jsp jpa ou faça a sua própria pergunta.