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

Dúvida na persistência de objetos com hibernate

Estou com uma dúvida que é a seguinte;

Tenho duas entidades (@Entity) Cliente e Endereco

Ainda não sei muito como funciona a persistência com o hibernate vou postar aqui o que eu entendir num exemplo:

Clase cliente;

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

    private static final long serialVersionUID = -1028162372873307236L;

    @Id
    @GeneratedValue    
    @Column(name="cod_cliente")
    private int cod_cliente;

    @OneToOne    
    @PrimaryKeyJoinColumn(name="cod_cliente")    
    private Endereco endereco;

    @OneToMany(mappedBy="cliente")
    private List<Locacao> locacoes;

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

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

    @Column(name="celular")
    private String celuar;

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

//get e set
//equal e hascode

}

Classe endereço;

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

    private static final long serialVersionUID = -3359145874076528853L;    

    @Id
    @GeneratedValue(generator="cod_cliente")
    @org.hibernate.annotations.GenericGenerator(name="cod_cliente",
            strategy="foreign",parameters=@Parameter(name="property",value="cliente"))
    @Column(name="cod_cliente")
    private int cod_endereco;

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

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

    @Column(name="numero")    
    private int numero;

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

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

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

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

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

//get e set
//hashcode e equals

}

O problema é que não estou conseguindo gravar o cliente na base de dados: Sei que a cardinalidade é oneToOne é que a chave estrangeira de endereço é gerada de acordo através da recuperação da chave primaria do cliente(só que não sei se definir isso corretamente pois não ta gerando).

Quando eu vou gravar no banco eu faço assim;

public class LocadoraDAO {

    public static void main(String[] args) {

        Conexao.openSessionFactory().openSession(); //nao sei se precisa?

        LocadoraDAO locadora = new LocadoraDAO();

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

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

        cliente.setCeluar("celular");
        cliente.setEmail("email");
        cliente.setNome("nome");
        cliente.setTelefone("telefone");

        cliente.setEndereco(endereco);  ???????????????

        endereco.setBairro("bairro");
        endereco.setNumero(1);
        endereco.setCep("cep");
        endereco.setCidade("cidade");
        endereco.setComplemento("complemento");
        endereco.setEstado("uf");
        endereco.setBairro("rua");

        endereco.setCliente(cliente); 

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



    }

1 - Uma grande dúvida que eu tenho é se ali onde ta marcado um monte de interrogações(??????)

cliente.setEndereco(endereco);

2 - No meu entender esse objeto(endereco) está nulo ?

To pensando assim porque quando o cliente configurou o endereço os atributos de cliente ainda não tinham sido configurados. Esse raciocínio está correto?

Mas de qualquer maneira quando o endereco configura um objeto de cliente:

endereco.setCliente(cliente);

3 - o cliente, no meu entender não estar nulo, mesmo assim não por que eu ja tinha configurado os atributos de cliente, mesmo assim não estou conseguindo gravar nada no banco entre essas duas entidades...esta errado?

  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!

0 resposta

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