Relacionamento Entre Tabelas (PostgreSql) - JavaFX

Galera estou desenvolvendo uma aplicação e estou cadastrando cliente e junto com o cliente cadastro também o endereço, só que precisa de uma dica, no banco de dados criei duas tabelas,uma chamada cliente e a outra endereço e fiz um relacionamento do cliente com o endereço, o problema é q na minha aplicação javafx não estou conseguindo puxar os dados do endereço.

ConnectionPGSQL conex = new ConnectionPGSQL();

public void Salvar(ClienteBEAN cliente){
    conex.Conectar();
    try {
        PreparedStatement stmt = conex.con.prepareStatement("insert into clientes(nome,telefone,email,cpf,endereco_id) values(?,?,?,?,?)");
        stmt.setString(1,cliente.getNome());
        stmt.setString(2,cliente.getTelefone());
        stmt.setString(3, cliente.getEmail());
        stmt.setString(4,cliente.getCpf());
        stmt.setInt(5,cliente.getEndereco().getIdEnd());
        stmt.executeUpdate();

    } catch (SQLException ex) {
        System.out.println("ERRO "+ex);
    }finally{
        conex.Desconectar();
    }
}

aqui está o meu codigo de como tou fazendo para puxar o id da tabela endereço e jogar na a minha tabela cliente com o nome da coluna de endereco_d.
o seguinte erro é mostrado: org.postgresql.util.PSQLException: ERROR: insert or update on table "clientes" violates foreign key constraint "clientes_endereco_id_fkey" Detalhe: Key (endereco_id)=(0) is not present in table "enderecos".

e aqui está o medo de como tou fazendo para salvar os dados no banco de dados:

public void SalvandoClienteNoBD(){
    String nome = txtNomeCliente.getText().toUpperCase();
    String telefone = txtTelefoneCliente.getText();
    String email = txtEmailCliente.getText();
    String cpf = txtCpfCliente.getText();

    String estado = txtEstado.getText();
    String cidade = txtCidade.getText();
    String bairro = txtBairro.getText();
    String rua = txtRua.getText();
    String numero = txtNumero.getText();

    if(nome.isEmpty()){
        Alert alert = new Alert(Alert.AlertType.WARNING);
        alert.setHeaderText("Por favor insira o nome do Cliente");
        alert.setTitle("Nome não inserido");
        alert.setContentText("Aperte OK Para continuar");
        alert.show();

    }else if(telefone.isEmpty()){
        Alert alert = new Alert(Alert.AlertType.WARNING);
        alert.setHeaderText("Por favor insira o telefone do Cliente");
        alert.setTitle("Telefone não inserido");
        alert.setContentText("Aperte OK Para continuar");
        alert.show();

    }else {
        /*INSTANCIAS DAS CLASSES CLIENTES*/
        ClienteDAO cdao = new ClienteDAO();
        ClienteBEAN cliente = new ClienteBEAN();

        /*INSTANCIAS DAS CLASSES ENDERECOS*/
        EnderecoDAO edao = new EnderecoDAO();
        EnderecoBEAN endereco = new EnderecoBEAN();


        /*SALVANDO DADOS DO ENDERECO DO CLIENTE NO BANCO*/
        endereco.setEstado(estado);
        endereco.setCidade(cidade);
        endereco.setBairro(bairro);
        endereco.setRua(rua);
        endereco.setNumero(numero);
        edao.Salvar(endereco);


        /*SALVANDO DADOS DO CLIENTE NO BANCO*/
        cliente.setNome(nome);
        cliente.setTelefone(telefone);
        cliente.setEmail(email);
        cliente.setCpf(cpf);
        cliente.setEndereco(endereco);//ENDEREÇO QUE ESTA SENDO CHAMADO AQUI É O OBJETO DA CLASSE EnderecoBEAN.
        cdao.Salvar(cliente);

        /*MENSAGEM DE ALERTA AO USÚARIO AO SUCESSO AO CADASTRAR*/
        Alert alert = new Alert(Alert.AlertType.INFORMATION);
        alert.setHeaderText("Cliente Cadastrado com Sucesso");
        alert.setTitle("Cadastrado");
        alert.setContentText("Aperte OK Para continuar");
        alert.show();
    }
}

Desde já agradeço

Vc está atribuindo o endereço ao cliente:

Mas em que momento este endereço recebeu o id para ser usado no save do cliente?
Usando jdbc n tem mágica como com Hibernate, vai tr q antes de salvar buscar o código ou retornar do próprio insert.