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

Hibernate não carrega ID de uma JoinColumn

Olá, meu problema é assim: tenho a classe Cliente e Endereco, coloquei o fetchType da variavel endereco na classe cliente para EAGER.

Mas quando eu chamo o método

cliente.getEndereco()

é carregado os dados de endereço, mas não é carregado seu ID.

Aí se eu quero fazer um update de Endereco da o seguinte erro:

org.hibernate.TransientObjectException: The given object has a null identifier: modelo.Endereco

o hibernate precisa do ID da classe para fazer o update

A Classe Cliente:

public class Cliente implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idcliente")
    private Integer idcliente;
    @Column(name = "nome")
    private String nome;
    @Column(name = "sobrenome")
    private String sobrenome;
    @Column(name = "cpf")
    private String cpf;
    @Column(name = "rg")
    private String rg;
    @Column(name = "telefone")
    private String telefone;
    @Column(name = "dtnasc")
    private LocalDate dtnasc;
    @JoinColumn(name = "endereco_idendereco", referencedColumnName = "idendereco")
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    private Endereco endereco;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "clienteIdcliente", fetch = FetchType.LAZY)
    private List<Venda> vendaList;

    public Cliente() {
    }

    //Métodos getters e setters

A Classe Endereço:

public class Endereco implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idendereco")
    private Integer idendereco;
    @Column(name = "cep")
    private Integer cep;
    @Column(name = "logradouro")
    private String logradouro;
    @Column(name = "numero")
    private Integer numero;
    @Column(name = "bairro")
    private String bairro;
    @Column(name = "cidade")
    private String cidade;
    @JoinColumn(name = "estado_idestado", referencedColumnName = "idestado")
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    private Estado estado;

    public Endereco() {
    }

se eu carregar um Endereço diretamente, vem o ID junto, mas eu gostaria de pegar através do Cliente.

Alguém sabe o que precisa fazer para o ID vir junto, ou porque não está vindo?

  • Boa noite Eduardo, Aparentemente não tem nenhum problema, só lembrando @ManyToOne por padrão já é EAGER e @OneToMany já é LAZY. Adiciona o equals e o hashcode das classes e o @Entity (Se já adicionou desconsidere).

    Weverton Reis   09 de nov de 2015
  • As tabelas do banco são antigas ou você esta implementando agora?

    Weverton Reis   09 de nov de 2015
  • Estou criando tudo agora, mas eu criei primeiro as tabelas no banco de dados, depois gerei as classes modelo a partir das tabelas existentes. Equals e hashcode ja tem. Mas o atributo ID de endereço deveria ter carregado tbm não teria?

    eduardo_vieira   09 de nov de 2015
  • Carregaria Endereco completo teoricamente.

    Weverton Reis   09 de nov de 2015
  • a unica coisa que tem diferente do que eu uso é o @Basic e a propriedade basic no @ManyToOne não sei se isso poderia gerar este problema eu nunca uso essa anotação ou atributo

    Cristian Urbainski   10 de nov de 2015
Mostrar todos os 9 comentários>
  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 hibernate ou faça a sua própria pergunta.